Foreach里面的foreach Strange Bug

时间:2017-08-30 13:46:10

标签: php arrays foreach

<?php
    foreach($products as $product){
      //some code here , echoing products and everything works there
      foreach($types as $type){
        echo $type['type'];
        // only does the echo on the first occurence of this "types" loop
      }
    }
?>

大家好,

我正在制作一种表格,以便人们可以为数据库的每个产品指定产品的类型。

$ products和$ types都是不同的数组。产品包含我的所有产品,$ types包含我的所有类型。

实际上我只有2种产品和2种类型。

所以,我的问题是:为什么回声没有显示foreach($products as $product)的第二次出现的任何内容,并在第一次出现时显示出良好的结果?

这是完全相同的数组,称为2次,但仅在循环的第一次出现时起作用。对我来说非常奇怪。

希望你能理解尽管英语不好。 再见

2 个答案:

答案 0 :(得分:1)

假设有4种产品和7种类型。使用以下代码,您将执行外循环4次,内循环执行7次。打印的内容是所有7个项目的$ type [&#39; type&#39;]的内容。这4次。

<?php
    foreach($products as $product){
        foreach($types as $type){
         echo $type['type'];
        }
     }
?>

您需要的是包含产品类型的$ products数组,以便您可以使用以下代码

<?php
    foreach($products as $product){
        foreach($product->type as $type){
         echo $type['type'];
        }
     }
?>

答案 1 :(得分:0)

这是因为在第二个循环中,$ type仍然是对最后一个数组项的引用,因此每次都会被覆盖。

你可以这样看:

$types = array ('type-one','type-two','type-three');

foreach ($types as $type) {
    echo $type;
}

foreach ($types as $type) {
    echo $type;
}

如您所见,第二次调用数组。它不会回应任何东西。

没有&#34; bug&#34;在你的代码中。它就像那样发生

要解决它。您可以在第二个循环之前使用此代码。它将重置数组引用。

reset($types);