PHP递归使用键打印多维数组的所有元素

时间:2012-12-22 21:11:09

标签: php arrays multidimensional-array

我找到了以下代码,它可以打印出数组中的所有元素。如何修改它以打印一次键,然后是键对应的所有值,然后是另一个键,那么所有与键对应的值?我也想修改它,因此它只打印每个键的前9个值(不超过这个值)。

 function printAll($a) {
  if (!is_array($a)) {
    echo $a, ' ';
     return;
   }

   foreach($a as $v) {
   printAll($v);
  }
 }

5 个答案:

答案 0 :(得分:7)

我假设你想要一些非编程人类可以从中获得某种意义。

function pretty_dump($arr, $d=1){
    if ($d==1) echo "<pre>";    // HTML Only
    if (is_array($arr)){
        foreach($arr as $k=>$v){
            for ($i=0;$i<$d;$i++){
                echo "\t";
            }
            if (is_array($v)){
                echo $k.PHP_EOL;
                Pretty_Dump($v, $d+1);
            } else {
                echo $k."\t".$v.PHP_EOL;
            }
        }
    }
    if ($d==1) echo "</pre>";   // HTML Only
}

用法:

$myarray=array(
    'mammals'=>array(
        'cats'=>array(
            'cheetah',
            'lion',
            'cougar'
        ),
        'dogs'=>array(
            'big'=>'Scooby',
            'small'=>'chihuahua',
            'medium'=>array(
                'pumi',
                'bulldog',
                'boxer'
            )
        ),
    ),
    'fish'=>'fish',
    'birds'=>array(
        'flying'=>array(
            'mallard',
            'condor',
            'gull'
        ),
        'nonflying'=>'emu'
    )
);

pretty_dump($myarray);

输出:

    mammals
        cats
            0   cheetah
            1   lion
            2   cougar
        dogs
            big Scooby
            small   chihuahua
            medium
                0   pumi
                1   bulldog
                2   boxer
    fish    fish
    birds
        flying
            0   mallard
            1   condor
            2   gull
        nonflying   emu

答案 1 :(得分:4)

function printAll($a) {
    if (!is_array($a)) {
        echo $a, ' ';
        return;
    }

    foreach($a as $k => $value) {
         if($k<10){
             printAll($k);
             printAll($value);
        }
    }
}

答案 2 :(得分:2)

function printAll($a) {
  foreach ($a as $k => $v) {
    echo $k, ' ';
  }

  printAllVals($a);
}

function printAllVals($a) {
  if (!is_array($a)) {
    echo $a, ' ';
      return;
   }

   foreach($a as $k => $v) {
     if ($k < 10) {
       printAllVals($v);
     }
   }
}

答案 3 :(得分:1)

print_rvar_dumpvar_export出了什么问题?

除此之外,请阅读foreach上的文档,您将清楚地看到如何获取您正在迭代的密钥。

答案 4 :(得分:0)

尝试:

foreach($a as $k => $v)

其中$k是您的密钥,$v仍然是值。