2012-02-02 98 views
2

可能重复:
Strange behavior Of foreach的foreach改变最后一个元素

为什么PHP有时会改变数组的最后一个元素?

我有一个数组:

Array 
(
    [0] => a_ 
    [1] => b_ 
    [2] => c_ 
    [3] => d_ 
) 

当我试图打印出所有emenets。输出是:

a_ 
b_ 
c_ 
c_ 

的完整代码:

<? 
$a = array('a', 'b', 'c', 'd'); 

foreach ($a as &$value) 
    $value = "{$value}_"; 

print_r($a); 

foreach ($a as $value) { 
    echo "$value\n"; 
} 

为什么?

回答

9

无论是在你的第二个循环或注销$值使用不同的变量名你的第一个问题将解决这个问题后。

$a = array('a', 'b', 'c', 'd'); 

foreach ($a as &$value) { 
    $value = "{$value}_"; 
} 

unset($value); 

print_r($a); 

foreach ($a as $value) { 
    echo "$value\n"; 
} 
+0

这是EXTREMEMLY有帮助!我被难倒了。谢谢! – 2015-09-30 15:27:54

1

看起来像PHP弄乱了你的榜样指针地址:

你不能写这样的:

<?php 

    $a = array('a', 'b', 'c', 'd'); 

    for ($i = 0; $i < count($a); $i++) 
     $a[$i] = "{$a[$i]}_"; 

    print_r($a); 

    foreach ($a as $value) { 
     echo "$value\n"; 
    } 

?> 
+3

在http://php.net/manual/en/control-structures.foreach.php已经解释 – ariefbayu 2012-02-02 13:13:39

+0

@silent:+1的链接:) – 2012-02-02 13:21:26