是否有可能以某种方式更改由foreach处理的数组?我试过这个剧本
$iterator = 10;
$cat = array(1 => 'a',2 => 'b',3 => 'c');
foreach ($cat as $k => $c)
{
if ($iterator < 15)
{
$cat[$iterator] = $iterator;
$iterator++;
}
echo $c;
}
但它没有改变'foreached'数组。 foreach的输出是
ABC
但foreach之后的数组中的var_dump是
array(6){[1] =&gt; string(1)“a”[2] =&gt; string(1)“b”[3] =&gt; string(1)“c”[10] =&gt; int(10)[11] =&gt; int(11)[12] =&gt; int(12)}
这意味着在foreach cyclus中添加了10,11,12,但是foreach没有迭代它们?有可能吗?或者我是否需要制作2foreach cyclus?
答案 0 :(得分:3)
<?php
$iterator = 10;
$cat = array(1 => 'a',2 => 'b',3 => 'c');
foreach ($cat as $k => &$c)//observe the '&'
{
if ($iterator < 15)
{
$cat[$iterator] = $iterator;
$iterator++;
}
echo $c;
}
?>
答案 1 :(得分:3)
互联网需要更多的猫!通过引用传递数组,您将获得所需的结果。请注意循环中的&$cat
。
$iterator = 10;
$cat = array(1 => 'a',2 => 'b',3 => 'c');
foreach($cat as $k => &$c)
{
if ($iterator < 15)
{
$cat[$iterator] = $iterator;
$iterator++;
}
echo $c;
}
答案 2 :(得分:3)
实际上,你不应该。因为foreach
将与数组副本一起使用。这意味着 - 它将首先复制您的数组,然后循环它。无论你是否要更改原始数组 - 因为你在foreach
内使用它的副本,任何修改都只会影响原始数组而不是循环副本。
但是 - 是的,在foreach
之后,您会在原始数组中看到您的更改。此外,做这样的事情几乎没有意义。它很难阅读,可能会出现无法预测的结果。
未提及的一件重要事情。以下不会起作用:
$iterator = 10;
$cat = array(1 => 'a');//only one element; same for empty array
foreach ($cat as $k => &$c)
{
if ($iterator < 15)
{
$cat[$iterator] = $iterator;
$iterator++;
}
echo $c;
}
- 因为PHP如何处理foreach
中的数组指针。