1

我需要在不知道数组外观的情况下读取嵌套数组。

例如;

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

需要格式化为字符串,如:

  1. 数据1_lvl1/数据1_lvl2/
  2. 数据1_lvl1/数据2_lvl2/数据1_lvl3/
  3. 数据2_lvl1/

但是数组可以是任意大小,其中包含任意数量的嵌套数组。

4

4 回答 4

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);

如您所见,脚本本身会执行 ECHO 以<br />在浏览器中查看结果时换行。

于 2012-05-22T13:19:30.763 回答
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);
于 2012-05-22T13:20:48.003 回答
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);
于 2012-05-22T13:19:07.610 回答
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. 数据1_lvl1/
  2. 数据1_lvl1/数据1_lvl2/
  3. 数据1_lvl1/数据2_lvl2/
  4. 数据1_lvl1/数据2_lvl2/数据1_lvl3/
  5. 数据2_lvl1/
于 2012-05-22T13:32:12.283 回答