【问题标题】:PHP foreach for child of multidimentional array?多维数组的孩子的PHP foreach?
【发布时间】:2017-03-05 21:30:53
【问题描述】:

我有一个这样的多维数组:

$food= array
  (
  array("Rye"   =>1, "Wheat" =>4, "White" =>4 ),
  array("Apple" =>2, "Orange"=>1, "Banana"=>5 ), <---data I want
  array("Cheese"=>2, "Milk"  =>1, "Cream" =>5 )
);

有没有办法可以使用 foreach 循环遍历第二个子数组(水果数据)?

【问题讨论】:

  • 我不认为这是重复的,因为 OP 只想循环第二个子数组。
  • @MeltingDog 总是第二个孩子吗?
  • @MeltingDog 看我的回答

标签: php arrays foreach


【解决方案1】:

像这样?

foreach($food as $produce) {
    foreach($produce as $name => $value) {
        echo "The produce $name has value: $value\n";
    }

}

第一个for循环只是遍历第一个数组,它没有我们需要的重要键,所以我只是获取对值的引用并将其存储在值$produce

然后,我们遍历数组$produce,但这一次key和value都很重要。

这就是我们在这个循环中使用$name =&gt; $value 的原因,所以我们得到了我们需要的两个值。
有些人更喜欢总是使用$key =&gt; $value,但我更喜欢给变量指定它们所代表的值的名称。

现在如果你需要一个特定的水果,你可以把它包装在一个函数中来搜索它

/**
 * Returns the fruit name from supplied food array.
 * @var $food array[array[string => value]]
 * @var $fruitName string The name of the fruit you want
 * @returns 
 **/
function findFruit($food,$fruitName) {
     foreach($food as $produce) {
        foreach($produce as $name => $value) {
            if($name == $fruitName) {
               return $value;
            }
        }
    }
} 
$quantityOfBananas = findFruit($food, "Banana");//5

【讨论】:

    【解决方案2】:

    您将不得不使用嵌套的 foreach,

    foreach($food as $item){
        foreach($item as $key => $value){
            echo $key; //Rye
            echo $value; // 1
        }
    }
    

    【讨论】:

      【解决方案3】:

      要循环子数组,您需要使用两个循环

      <?php
      
          $food= array
            (
            array("Rye"=>1,"Wheat"=>4,"White"=>4),
            array("Apple"=>2,"Orange"=>1,"Banana"=>5), 
            array("Cheese"=>2,"Milk"=>1,"Cream"=>5)
          );
      
          foreach($food  as $data){
               foreach($data as $key=>$value){
                 echo "key=".$key." value=".$value.'<br>';
          }
      }
      

      输出将是

      key=Rye value=1
      key=Wheat value=4
      key=White value=4
      key=Apple value=2
      key=Orange value=1
      key=Banana value=5
      key=Cheese value=2
      key=Milk value=1
      key=Cream value=5
      

      【讨论】:

        【解决方案4】:

        试试这个:

        $food= array
        (
          array("Rye"=>1,"Wheat"=>4,"White"=>4),
          array("Apple"=>2,"Orange"=>1,"Banana"=>5),    
          array("Cheese"=>2,"Milk"=>1,"Cream"=>5)
        );
        
        foreach($food as $key => $fruits){
          if($key == 1){
           foreach($fruits as $ke => $fruit){
            echo $ke."-".$fruit."<br>";
          }
        }
        }
        

        PS:你的小麦有语法错误"Wheat"-&gt;4

        【讨论】:

          【解决方案5】:

          您可以在 foreach(嵌套的 foreach)中使用 foreach,如下所示

          foreach($food as $f)
            {
              foreach ($f as $fn => $sn)
              {
                  echo $fn.$sn;
          
              }
            }
          

          【讨论】:

            【解决方案6】:

            既然你知道它总是第二个孩子,我会保持简单并做这样的事情:

            $fruits = $food[1];
            foreach($fruits as $key => $value) {
                // do something
            }
            

            不需要两个foreach 循环。

            【讨论】:

              猜你喜欢
              • 2017-10-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-05-01
              • 1970-01-01
              • 2015-08-13
              • 2011-09-18
              • 1970-01-01
              相关资源
              最近更新 更多