在php中动态读取嵌套数组

在php中动态读取嵌套数组,php,arrays,Php,Arrays,我需要在不知道数组外观的情况下读取嵌套数组 比如, $data = array( 'Data1_lvl1' => array( 'Data1_lvl2' => "value", 'Data2_lvl2' => array( 'Data1_lvl3' =>

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

比如,

$data = array(
        'Data1_lvl1' => array(
                            'Data1_lvl2' => "value",
                            'Data2_lvl2' => array(
                                                'Data1_lvl3' => "value"
                                            )
                        ),
        'Data2_lvl1' => 'value'
    );
需要格式化为字符串,如:

  • 数据1第1层/数据1第2层/
  • 数据1层1/数据2层2/数据1层3/
  • 数据2_lvl1/

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

    一种方法是使用类似于以下函数的递归遍历数组:

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

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

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

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

    您的数据:

    $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);
    
    功能:

    $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);
    
    函数array2str($array,$str){
    foreach($key=>$val的数组){
    if(is_数组($val)){
    $str.=$key.'/';
    array2str($val,$str);
    }
    }
    echo$str.“
    ”; 返回$str; } array2str(数据);

    正如您所见,在浏览器中查看结果时,脚本本身会与

    进行回显,以打断行。

    如果您只想输出数组元素的名称,则此递归函数将完成此操作

    $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);
    
    您的数据:

    $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);
    
    功能:

    $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);
    
    函数array2str($array,$str){
    foreach($key=>$val的数组){
    if(is_数组($val)){
    $str.=$key.'/';
    array2str($val,$str);
    }
    }
    echo$str.“
    ”; 返回$str; } array2str(数据);
    正如您所见,在浏览器中查看结果时,脚本本身会与

    进行回显,以打断该行。

    $data=array(
    
    $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);
    
    'Data1_lvl1'=>数组( 'Data1_lvl2'=>“值”, 'Data2_lvl2'=>数组( “数据1_lvl3”=>“值” ) ), “数据2_lvl1”=>“值” ); 函数printary($array) { foreach($key=>$value的数组) { 回声$key.'/'; if(是_数组($value)) { printArray($value); }否则{ 回声“
    ”; } } } 打印阵列(数据);
    $data=array(
    'Data1_lvl1'=>数组(
    'Data1_lvl2'=>“值”,
    'Data2_lvl2'=>数组(
    “数据1_lvl3”=>“值”
    )
    ),
    “数据2_lvl1”=>“值”
    );
    函数printary($array)
    {
    foreach($key=>$value的数组)
    {
    回声$key.'/';
    if(是_数组($value))
    {
    printArray($value);
    }否则{
    回声“
    ”; } } } 打印阵列(数据);
    使用该功能:

    <?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);
        }
      }
    }
    
    使用该功能:

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

    您可以使用PHP内置的
    数组\u walk\u recursive
    函数。请参阅,您可以使用PHP的内置
    array\u walk\u recursive
    函数。参考