如何使用foreach循环修改数组的值?

6

我有一个foreach循环,我想根据我的值修改数组。但是当我尝试将$bizaddarray稍后转换为字符串时,所有的HTML标签仍然存在。这是我的foreach循环,如何使strip标签永久?

    foreach ($bizaddarray as $value) {
        strip_tags(ucwords(strtolower($value)));
    }
2个回答

9

有两种方法可以改变当前值所共享的内存位置,一种是直接更改,另一种是通过访问源数组来访问该值。

// Memory reference
foreach ($bizaddarray as &$value) {
    $value = strip_tags(ucwords(strtolower($value)));
}
unset($value); # remove the reference

或者

// Use source array
foreach ($bizaddarray as $key => $value) {
    $bizaddarray[$key] = strip_tags(ucwords(strtolower($value)));
}

2
我建议采用第二个选项,但使用复制的数组,因为我认为PHP不能很好地处理您更改正在迭代的数组的键。在这种情况下可以,但一般而言不是最佳实践。我记得有几次使用选项1会因为PHP在foreach完成后没有重置指针并获得一些幽灵更改而导致问题很混乱。 - Paystey
同意Paystey的观点。应该避免选项1。如果代码不立即unset($value);,则对$value的任何写入操作都会导致最后一个数组元素被覆盖! - webbiedave
怎么样使用 foreach (array_keys($bizaddarray) as $key) { $bizaddarray[$key] = strip_tags(ucwords(strtolower($bizaddarray[$key]))); } - Capi Etheriel

0
foreach ($bizaddarray as $key => $value) {
    $bizaddarray[$key] = ucwords(strtolower($value));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接