迭代和修改数组最佳方法

时间:2013-10-31 16:59:47

标签: php php-5.3

以下是在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;
}

我很欣赏这个解释, 提前谢谢!

2 个答案:

答案 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,这是第二个选项的作用。这就是为什么它是首选解决方案,在这种情况下。