【问题标题】:PHP change multidimensional array index in running foreachPHP在运行foreach时更改多维数组索引
【发布时间】:2016-08-31 00:56:45
【问题描述】:

我正在尝试在运行 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] -> 作为 $item = 胡萝卜
回声胡萝卜

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

结束

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

【问题讨论】:

  • 很不清楚你想在这里实现什么。
  • foreach 循环获取变量 $array[0] 并对其进行处理
  • 你想要apple-carrot-potato还是apple-orrange-carrot-potato
  • 但是现在你想要第一个数组的第一个元素和第二个数组的第一个元素? echo $array[0][0] . " - " . implode(" - ", $array[1]);example
  • foreach 获取数组作为值。正如 Shady 所写,您无法更改 foreach 的迭代索引,因为指向它的指针仍指向先前的结果。这样做不会改变指针并继续原样。您需要使用 for 或 while 循环,根据您的情况可能会使用递归。

标签: php arrays multidimensional-array indexing foreach


【解决方案1】:

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

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

来源:Foreach: PHP.net

【讨论】:

  • 嗯,很高兴知道这一点。唔。那我可以用for循环来做吗?谢谢
  • for($c=0; $c
  • 当然可以,但是我可以在循环中更改变量 $c 吗?就像我上面的例子一样
  • $array = array( array("apple", "orange"), array("carrot", "potato"), array("mango", "doesn't matter"), array("grapes", "doesn't matter"), ); $counter = 0; for($c=0; $c<4;$c++) { $item = $array[$c][0]; $c++; echo $item . " - "; echo " "; } 当然可以
  • 我什至没有意识到,也有 for 循环:D 这不是最终版本,它应该如何工作,但我会尝试一些东西,然后我会带着解决方案或另一个问题回来:D
【解决方案2】:

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

多亏了你,我意识到,我不能通过 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 - 我想实现的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    相关资源
    最近更新 更多