在php中动态读取嵌套数组

时间:2012-05-22 13:09:43

标签: php arrays

我需要读取嵌套数组,而不知道数组的外观。

例如;

$data = array(
        'Data1_lvl1' => array(
                            'Data1_lvl2' => "value",
                            'Data2_lvl2' => array(
                                                'Data1_lvl3' => "value"
                                            )
                        ),
        'Data2_lvl1' => 'value'
    );

需要格式化为以下字符串:

  1. Data1_lvl1 / Data1_lvl2 /
  2. Data1_lvl1 / Data2_lvl2 / Data1_lvl3 /
  3. Data2_lvl1 /
  4. 但是数组可以是任意大小,其中包含任意数量的嵌套数组。

4 个答案:

答案 0 :(得分:2)

如果你只想输出数组元素的名称,那么这个递归函数就可以了。

您的数据:

$data = array(
        'Data1_lvl1' => array(
                            'Data1_lvl2' => "value",
                            'Data2_lvl2' => array(
                                                'Data1_lvl3' => "value"
                                            )
                        ),
        'Data2_lvl1' => 'value'
    );

<强>功能:

function array2str($array, $str) {
  foreach($array as $key => $val) {
    if (is_array($val) ) {
        $str .= $key . '/';
        array2str($val, $str);
    }
  }
  echo $str.'<br />';  
  return $str;
}

array2str($data);

正如您所看到的那样,脚本在使用<br />进行ECHO时会在浏览器中查看结果时断行。

答案 1 :(得分:2)

$data = array(
        'Data1_lvl1' => array(
                            'Data1_lvl2' => "value",
                            'Data2_lvl2' => array(
                                                'Data1_lvl3' => "value"
                                            )
                        ),
        'Data2_lvl1' => 'value'
    );


function printArray($array)
{
    foreach ($array as $key=>$value)
    {
       echo $key.'/';
       if (is_array($value))
       {
          printArray($value);           
       } else {    
        echo '<br>';
        }

    }

}


printArray($data);

答案 2 :(得分:1)

一种方法是递归遍历数组,其功能类似于:

<?php
function f($d, $str = '') {
        foreach ($d as $key => $val) {
                if (is_array($val)) f($val, $str . '/' . $key); // If this element is array parse next level
                else print_r($str . '/' . $key . '/'); // Output current string or do what you need to do with it..
        }
}

$data = array(
        'Data1_lvl1' => array(
                            'Data1_lvl2' => "value",
                            'Data2_lvl2' => array(
                                                'Data1_lvl3' => "value"
                                            )
                        ),
        'Data2_lvl1' => 'value'
);

f($data);

答案 3 :(得分:0)

使用该功能:

<?php
function print_tree ($data, $prefix = '', &$index = 1) {
  foreach($data as $key => $datum) {
    echo $index++ . '. ' . ($new_prefix =  $prefix . $key . '/') . PHP_EOL;
    if (is_array($datum)) {
      print_tree ($datum, $new_prefix, $index);
    }
  }
}

我得到了

  
      
  1. Data1_lvl1 /
  2.   
  3. Data1_lvl1 / Data1_lvl2 /
  4.   
  5. Data1_lvl1 / Data2_lvl2 /
  6.   
  7. Data1_lvl1 / Data2_lvl2 / Data1_lvl3 /
  8.   
  9. Data2_lvl1 /
  10.