【问题标题】:foreach change last element [duplicate]foreach 更改最后一个元素
【发布时间】:2012-02-25 03:19:28
【问题描述】:

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

为什么?

【问题讨论】:

    标签: php arrays foreach php-5.3


    【解决方案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";
        }
    
    ?>
    

    【讨论】:

    【解决方案2】:

    在第二个循环中使用不同的变量名或在第一个循环后取消设置 $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";
    }
    

    【讨论】:

    • 这非常有帮助!我被难住了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 2016-11-26
    • 2011-09-06
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多