0

以下是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如果我们不使用密钥,为什么要包含?,还有为什么我们需要包含&in &$val

foreach($array as $val){
   echo $val;
}

感谢您的解释,在此先感谢!

4

2 回答 2

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 引用导致数据损坏

PS。我没有投反对票。我对人们投反对票而不发表评论感到非常恼火。

于 2013-10-31T17:08:33.473 回答
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通过引用传递,这是第二个选项的作用。这就是为什么它是首选解决方案,在这种情况下。

于 2013-10-31T17:09:54.580 回答