PHP在运行foreach时更改多维数组索引


PHP change multidimensional array index in running foreach

我试图在运行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;
    }
}

输出是:苹果-胡萝卜-土豆-,这是我想要实现的。