以下是在PHP5中迭代和修改数组的最佳方法。* +
(来源:http://zend-php.appspot.com/questions_list - 问题#3)
$array = array("one" => 1, "two" => 2, "three" => 3, "four" => 4, "five" => 5);
foreach($array as $key => &$val) {
$val += 1;
}
这种迭代和修改的方法是什么让它比其他方法更好?
有人可以解释一下这实际上是怎么来的吗?
这个迭代很好,如果我们不使用密钥,为什么要包含as $key => &$val
?为什么我们还需要在&
中包含&$val
:
foreach($array as $val){
echo $val;
}
我很欣赏这个解释, 提前谢谢!
答案 0 :(得分:2)
由于他们打算修改该值,因此将其作为参考是明智的。
$array = array("one" => 1, "two" => 2, "three" => 3, "four" => 4, "five" => 5);
foreach($array as $key => &$val) {
$val += 1;
}
将1
添加到所有值。
如果你这样做了:
foreach($array as $key => $val) {
$val += 1;
}
什么都不会发生。
我非常不同意这是最好的方式。我更愿意看到:
foreach($array as $key => $val) {
$array[$key] += 1;
}
因为它更直接。我很乐意相信它表现不佳,但我也不在乎(除非有理由开始优化)。
还值得一提的是,使用引用会导致奇怪的情况,例如:PHP reference causes data corruption
PS。我没有投票。我对人们的贬低并没有发表评论感到非常恼火。
答案 1 :(得分:1)
问题如下:
使用PHP 5迭代和修改数组的每个元素的最佳方法是什么?
这些是链接中列出的四个选项:
// method one
for($i = 0; $i < count($array); $i++) {
/* ... */
}
// method two
foreach($array as $key => &$val) {
/* ... */
}
// method three
foreach($array as $key => $val) {
/*... */
}
// method four
while(list($key, $val) = each($array)) {
/* ... */
}
选项1,3和4都可以,它们可用于迭代数组。但是,要修改原始数组,您需要通过引用传递$val
,这是第二个选项的作用。这就是为什么它是首选解决方案,在这种情况下。