循环中是否可以有多个键?

时间:2011-09-20 09:04:26

标签: php foreach

我没有问题,但我正在寻找任何其他可能更好或更快的解决方案。 我有两个键ALL和ART的数组:

$myData = Array (
 [ALL] => Array (
   [0] => Array (
    [ID_COUNTRY] => 23
    [DELIVERY_DAYS] => 23
    [AMOUNT] => 23
   )
  [1] => Array (
   [ID_COUNTRY] => 30
   [DELIVERY_DAYS] => 30
   [AMOUNT] => 30
  )
 )
 [ART] => Array (
  [0] => Array (
   [ID_COUNTRY] => 10
   [DELIVERY_DAYS] => 10
   [AMOUNT] => 10
  )
  [1] => Array (
   [ID_COUNTRY] => 2
   [DELIVERY_DAYS] => 20
   [AMOUNT] => 20
  )
 )
)

并有2个foreach循环来检查值

<?php 
foreach ($myData as $key1=>$key2) {
  foreach ($key2 as $key=>$data) { 
    ...
  }
}
?>

可以做这样的事情,或者是使用两个foreach循环而没有任何额外库的唯一解决方案。

<?php
foreach($myData as $key1=>$key2=>$value) {
 echo $key1; // [ALL] or [ART]
 echo $key2; // [ALL][$key2] or [ART][$key2];
}
?>

3 个答案:

答案 0 :(得分:3)

如果要循环多维数组,则需要提供代码:

foreach ($myData as $key1=>$key2) {
  foreach ($key2 as $key=>$data) { 
    ...
  }
}

没有使用最终会做到这一点的事情,没有办法解决它。这里没有速度。如果存在微观优化,你应该忽略它:)

答案 1 :(得分:1)

这是不可能的。但你可以这样做

<?php 
foreach ($myData as $key1=>$key2) {
  foreach ($key2 as $key=>$data) { 
    echo $key1;
    echo $key2;
  }
}
?>

答案 2 :(得分:0)

也许并不完全是你想要的;我仍然想通知你。 可以递归循环遍历多维数组,使用RecursiveArrayIterator结合RecursiveIteratorIterator

$rii = new RecursiveIteratorIterator( new RecursiveArrayIterator( $myData ), RecursiveIteratorIterator::SELF_FIRST );
foreach( $rii as $key => $value )
{
    echo $key;

    // you can keep track of the current depth with:
    $depth = $rii->getDepth();
}