PHP在运行foreach

时间:2016-05-05 09:35:52

标签: php arrays multidimensional-array indexing foreach

我正在尝试在运行foreach时更改多维数组索引:

$array = array(
    array("apple", "orange"),
    array("carrot", "potato")
    );

$counter = 0;

foreach($array[$counter] as &$item) {
    echo $item . " - ";
    $counter = 1;
}

我认为,输出将是 apple - carrot - potato - ,因为在第一次运行时它从零数组获取值然后在下一次运行第一个数组的值。

但是,输出为 apple - orange -

我尝试添加"&"在变量$ item之前,但我猜它不是我想要的。

有什么办法吗?
谢谢

//好吧,我会尽量让它更清洁:
这个foreach从$ array [0]获取值,但在运行中我想将索引更改为1,因此在下一次重复时它将从$ array [1]中获取值

这是否足够清楚?

注意:我不知道我的数组有多少维度。

我的目的不是解决这个问题,我需要知道的是,是否可以在运行中更改foreach循环的来源:

我的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] - > as $ item = apple
回声苹果
等,现在计数器更改为1

第二次运行
$ array [1] - > as $ item = carrot
回声胡萝卜

第三次运行
$ array [1] - > as $ item =土豆
回声土豆

结束

我真的想尽可能地说清楚:D

2 个答案:

答案 0 :(得分:1)

当foreach首次开始执行时,内部数组指针会自动重置为数组的第一个元素。现在,通过更改计数器,您正在更改数组(内部数组),但它再次设置为第一个数组。

更改之间的数组可能会导致意外行为。

来源:Foreach: PHP.net

答案 1 :(得分:0)

所以最后,我找到了一个时间,这就是你如何在运行循环中改变源数组的索引。

感谢你,我意识到,我不能通过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;
    }
}

输出是: apple - carrot - potato - 正如我想要的那样。