我试图在运行foreach时更改多维数组索引:
$array = array(
array("apple", "orange"),
array("carrot", "potato")
);
$counter = 0;
foreach($array[$counter] as &$item) {
echo $item . " - ";
$counter = 1;
}
我想,输出应该是苹果-胡萝卜-土豆-,因为在第一次运行中,它从零数组中获取值,然后在接下来的运行中,从第一个数组中获取。
然而,输出是苹果橙-
我尝试在变量$item之前添加"&",但我想这不是我想要的。
有什么办法吗
谢谢
//好吧,我会尽量让它更干净:
这个foreach从$array[0]中获取值,但在运行中我想将索引更改为1,所以在下一次重复中,它将从$array[1]中获取值
这够清楚吗?
注意:我不知道我的数组有多少维度。
我这样做的目的不是解决这个确切的情况,我只需要知道是否有可能在运行中更改foreach循环的来源:
我的前臂
$counter = 0;
foreach($array[$counter] as $item) {
echo $item . " - ";
}
正在从$array[0]中获取值。但在它内部,我想将$counter更改为1,所以下次它重复时,它将从$array[1]中获得值
$counter = 0;
foreach($array[$counter] as $item) {
echo $item . " - ";
$counter = 1;
}
我明白了,这有点难以解释。foreach的工作方式如下:
$array的索引为$counter
首次运行
$array[0]->作为$item=apple
回声苹果
等待,现在计数器变为1
第二次运行
$array[1]->as$item=胡萝卜
回波胡萝卜
第三次运行
$array[1]->as$item=土豆
回波马铃薯
结束
我真的在努力让它尽可能清楚:D
foreach第一次开始执行时,内部数组指针会自动重置为数组的第一个元素。现在,通过更改计数器,您正在更改数组(内部数组),但它再次设置为第一个数组。
在两者之间更改数组可能会导致意外行为。
来源:Foreach:PHP.net
最后,我找到了一个时间,这就是在运行循环中更改源数组索引的方法。
多亏了你,我意识到,我不能用foreach做到这一点,但还有很多其他循环。
如果你面临同样的问题,这里是我的解决方案:
$array = array(
array("apple", "orange"),
array("carrot", "potato")
);
$counter = 0;
$x = 0;
while($x < count($array[$counter])) {
echo $array[$counter][$x] . " - ";
$x++;
if($counter == 0) {
$x = 0;
$counter = 1;
}
}
输出是:苹果-胡萝卜-土豆-,这是我想要实现的。