【问题标题】:foreach inside the for loop; keep loopingfor 循环内的 foreach ;继续循环
【发布时间】:2015-06-08 21:23:58
【问题描述】:

我现在正在练习 foreach 和 for 循环,将它们结合起来会导致我意想不到的结果。下面是 for 循环语句中的 foreach 语句。

PHP:

<?php
$names = array("A", "B", "C", "D"); 

for ($i = 0; $i <= 3; $i++) 
{
    foreach ($names as $name) 
    {
        echo "$name = $i ";
    }
}
?>

输出:

A = 0 B = 0 C = 0 D = 0 A = 1 B = 1 C = 1 D = 1 A = 2 B = 2 C = 2 D = 2 A = 3 B = 3 C = 3 D = 3

预期输出:

A = 0 B = 1 C= 2 D = 3

请告诉我我做错了什么以及解决方案是什么。

PS:我不想使用数组键和值。 :)

【问题讨论】:

  • PS:我不想使用数组键
  • 您正在运行嵌套循环,对于 for 循环的每次迭代,foreach 循环将迭代整个 $names 数组。所以你有 4 次外部迭代,3 次内部迭代,剩下 4x3 = 12 echo 调用。
  • @MarcB 我怎样才能只进行 1 次迭代?
  • 删除 for 循环。如果您只想打印 $names 数组,那么您只需要 foreach。基本上你有一个杂货清单,上面写着“买面包、牛奶、鸡蛋”,然后你的另一半把你送到商店 4 次。所以你买了 4 次break/milk/eggs,最后想知道为什么你有 4 个面包、4 罐牛奶和 4 个鸡蛋盒。
  • 我会移除外部循环并将 $i 计数器放在 FOREACH 内

标签: php for-loop foreach


【解决方案1】:

foreach 循环遍历整个数组,每次通过外部循环。试试这个:

$i = 0;
foreach ($names as $name) {
    echo "$name = $i ";
    $i++;
}

【讨论】:

    【解决方案2】:

    你只想要foreach

    foreach($names as $key => $value) {
       echo "$value: $key";
    }
    

    您不需要为了获取数组键而嵌套循环样式 - PHP 可以使用 as $key =&gt; $value 版本的 foreach 轻松地将它们提供给您。

    【讨论】:

    • 请参阅 OP 问题中的 PS:PS:我不想使用数组键和值。 :) 不要问我为什么不。
    • 那么你想要的就是不可能的。 “我有一个包含键和值的数组。我不想要键和值”。那你就不能有数组了。
    • 我知道加拿大人已经晚了 :) 但是:你想要我不想要它,OP 写的。
    • 哎呀,对...我整天都在吊顶上拉电缆。我被所有的瓷砖灰尘弄瞎了。
    • 好吧,如果数组被修改,或者某个键被删除了怎么办?你不能假设它们总是连续的。例如$foo = array(); $foo[1] = 'bar'; $foo[999999] = 'baz';。哎呀,现在 $i++ 版本将不起作用,因为当它应该是 1/999999 时,你会吐出 1/2
    【解决方案3】:

    你可以使用 While 循环

    $names = array("A", "B", "C", "D"); 
    $i=0;
    
        foreach ($names as $name) 
        {
            echo "$name = $i ";
            $i++;
            array_pop($names);
        }
    

    结果:

    A = 0 B = 1 C = 2 D = 3

    【讨论】:

    • 如果只运行一次,那么有一段时间有什么意义呢?
    • @MarcB 我猜只是为了好玩。
    猜你喜欢
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 2022-08-09
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    • 2023-04-09
    相关资源
    最近更新 更多