эхо сложного массива и отступа подмассивов - PullRequest
1 голос
/ 22 июля 2011

У меня сложный массив, что-то вроде этого:

Array {
        k1 => text1
        k2 => Array {
                      k3 =>text2
                      k4 => Array {
                                    k5 => text3
                                  }
                      k6 => text4
                    }
      }

И я хочу отобразить массив, но сделать отступ для каждого подмассива следующим образом:

key: k1 >> value: text1
Array key: k2 >> values:
    key: k3 >> value: text2
    Array key: k4 >> values:
        key: k5 >> value: text3
    key: k6 >> value: text4

Дайте мне знать, если вам нужны какие-либо подробности.

Ответы [ 5 ]

4 голосов
/ 22 июля 2011

Вот рекурсивная функция, которая будет делать отступ:

( Отредактировано : отступ не работает должным образом для всех подэлементов, теперь он работает)

function arrayPrettyPrint($arr, $level = 0) {
    foreach($arr as $k => $v) {
        for($i = 0; $i < $level; $i++)
            echo "&nbsp;";   // You can change how you indent here
        if(!is_array($v))
            echo($k . " => " . $v . "<br/>");
        else {
            echo($k . " => <br/>");
            arrayPrettyPrint($v, $level+1);
        }
    }
}

$arr = array(
    1, 2, 3,
array( 4, 5, 
    array( 6, 7, array( 8 )))
);

arrayPrettyPrint($arr);
2 голосов
/ 22 июля 2011

Это массив печати, как ваш.

<?php

function print_array($array, $tabs = '') {
    $result = '';
    if (is_array($array)) {
        foreach ($array as $k => $v) {
            if (is_array($v)) {
                $result .= $tabs . 'Array key: '. $k . ' >> values: ' . PHP_EOL . print_array($v, $tabs."\t");
            } else {
                $result .= $tabs . 'key: ' . $k . ' value: ' . $v . PHP_EOL;
            }
        }
    } else {
        $result = $array . PHP_EOL;
    }
    return $result;
}

$array = array(
    'k1' => 'text1',
    'k2' => array(
        'k3' => 'text2',
        'k4' => array(
            'k5' => 'text3'
        ),
        'k6' => 'text4'
    )
);

echo print_array($array);

?>

1 голос
/ 22 июля 2011

Попробуйте воспользоваться этой быстрой функцией:

function recurseDisplay($my_array,$padding = 2){

   echo "<br />";
   foreach($my_array as $item){
     if (is_array($item)){
       $padding += 10;
       for ($p = 0; $p < $padding; $p++){
         echo "&nbsp;";
       }
       echo "Array: &nbsp; {" ;
       recurseDisplay($item,$padding);
       echo " <br /> } <br />";
     }
     else{
        for ($p = 0; $p < $padding; $p++){
         echo "&nbsp;";
       }
       echo "key :" . $item . "<br />";
     }
   }
 }

 recurseDisplay($my_array);
0 голосов
/ 22 июля 2011

Похоже, что этот вопрос задавался раньше здесь . Это было решением KeithGrant

function RecursiveWrite($array) {
    foreach ($array as $vals) {
        echo "\t" . $vals['comment_content'];
        RecursiveWrite($vals['child']);
    }
}
0 голосов
/ 22 июля 2011

Будет ли var_dump работать за вас?

 myVar = Array {
        k1 => text1
        k2 => Array {
                      k3 =>text2
                       k4 => Array {
                                    k5 => text3
                                  }
                      k6 => text4
                    }
      }

попробуйте

var_dump (MYVAR)

...