foreach改变最后一个元素

时间:2012-02-02 13:07:17

标签: php arrays foreach php-5.3

  

可能重复:
  Strange behavior Of 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";
}

为什么?

2 个答案:

答案 0 :(得分:10)

在第二个循环中使用不同的变量名称或在第一个循环后取消设置$ value将解决此问题。

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

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

unset($value);

print_r($a);

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

答案 1 :(得分: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";
    }

?>
相关问题