gpt4 book ai didi

php - foreach 无法正确打印更改后的数组

转载 作者:行者123 更新时间:2023-12-02 13:31:27 25 4
gpt4 key购买 nike

我正在尝试使用 foreach 打印数组,并且在打印时,如果出现某个 $key,我想对数组进行更改。问题是,即使数组发生更改,更改也不会被打印。

在下面的示例中,您会发现:

  • 我用来更改数组的函数;
  • 首次打印的数组没有任何更改;
  • 然后回显打印输出并在此过程中进行更改 - 全部使用 foreach;
  • 同一张表的另一个打印输出,但这次有所更改。

    <?php

    function insert_before_key($array, $key, $data = NULL){
    if (($offset = array_search($key, array_keys($array))) === false){
    $offset = count($array);
    }
    return array_merge(array_slice($array, 0, $offset), (array) $data, array_slice($array, $offset));
    }

    $array = array(
    "no_color" => "blank",
    "color1" => "red",
    "color2" => "green",
    "color3" => "blue",
    );

    echo "<pre>";
    print_r($array);
    echo "</pre>";

    foreach ($array as $key => $value) {
    echo $key . ": " . $value . "<br />";
    if ($key === "color1"){
    $array = insert_before_key($array, "color2", array("color1.5" => "yellow"));
    }
    }

    echo "<pre>";
    print_r($array);
    echo "</pre>";

    echo "<br />";

    ?>

请注意,新的 $key 将在当前 $key 之后跳转,因此我希望它会出现。知道为什么会发生这种情况吗?

编辑:

多玩了一下 foreach,我认为它一定是缓存了键或其他东西......

    <?php
$test_array = array(0,1,2,3,4,5,6,7,8,9);

foreach ($test_array as $key => $value) {
if ($key === 5){$test_array[7] = $test_array[7]+1;}
echo $key . ": " . $value . "<br />";
}

print_r($test_array);
?>

上面将显示 UNCHANGED echo,但 CHANGED print_r。

最佳答案

来自手册:“由于 foreach 依赖于内部数组指针,因此在循环内更改它可能会导致意外的行为。” http://php.net/manual/en/control-structures.foreach.php

您不应该修改正在循环的数组。

关于php - foreach 无法正确打印更改后的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25000729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com