Эхо многомерного массива в PHP - PullRequest
13 голосов
/ 18 января 2011

У меня есть многомерный массив, и я пытаюсь выяснить, как просто «повторить» элементы массива.Глубина массива неизвестна, поэтому он может быть глубоко вложенным.

В случае массива ниже, правильный порядок эхо будет:

This is a parent comment
This is a child comment
This is the 2nd child comment
This is another parent comment

Этомассив, о котором я говорил:

Array
(
    [0] => Array
        (
            [comment_id] => 1
            [comment_content] => This is a parent comment
            [child] => Array
                (
                    [0] => Array
                        (
                            [comment_id] => 3
                            [comment_content] => This is a child comment
                            [child] => Array
                                (
                                    [0] => Array
                                        (
                                            [comment_id] => 4
                                            [comment_content] => This is the 2nd child comment
                                            [child] => Array
                                                (
                                                )
                                        )
                                )
                        )
                )
        )

    [1] => Array
        (
            [comment_id] => 2
            [comment_content] => This is another parent comment
            [child] => Array
                (
                )
        )
)

Ответы [ 9 ]

29 голосов
/ 18 января 2011
<code><pre>
<?php print_r ($array); ?>
14 голосов
/ 18 января 2011

Похоже, вы пытаетесь записать только одно важное значение из каждого массива. Попробуйте рекурсивную функцию, например, так:

function RecursiveWrite($array) {
    foreach ($array as $vals) {
        echo $vals['comment_content'] . "\n";
        RecursiveWrite($vals['child']);
    }
}

Вы также можете сделать его немного более динамичным, чтобы строки 'comment_content' и 'child' передавались в функцию в качестве параметров (и продолжали передавать их в рекурсивном вызове).

5 голосов
/ 23 февраля 2016

Правильное, лучшее и чистое решение:

function traverseArray($array)
{
    // Loops through each element. If element again is array, function is recalled. If not, result is echoed.
    foreach ($array as $key => $value)
    {
        if (is_array($value))
        {
            Self::traverseArray($value); // Or
            // traverseArray($value);
        }
        else
        {
            echo $key . " = " . $value . "<br />\n";
        }
    }
}

Вы просто вызываете эту вспомогательную функцию traverseArray($array) в своем текущем / основном классе следующим образом:

$this->traverseArray($dataArray); // Or
// traverseArray($dataArray);

источник: http://snipplr.com/view/10200/recursively-traverse-a-multidimensional-array/

2 голосов
/ 18 января 2011

если вы хотите сохранить его как переменную, вы можете сделать:

recurse_array($values){
    $content = '';
    if( is_array($values) ){
        foreach($values as $key => $value){
            if( is_array($value) ){
                $content.="$key<br />".recurse_array($value);
            }else{
                $content.="$key = $value<br />";
            }

        }
    }
    return $content;
}

$array_text = recurse_array($array);

Очевидно, что вы можете отформатировать при необходимости!

2 голосов
/ 18 января 2011

print_r($arr) обычно дает довольно читаемый результат.

0 голосов
/ 08 июня 2014

Есть несколько способов сделать это

1) - print_r($array); или если вы хотите красиво отформатированный массив, тогда

echo '<pre>'; print_r($array); echo '<pre/>';

// --------------------------------------------- ----

2) - используйте var_dump($array), чтобы получить больше информации о содержимом массива, таком как тип данных и длина. // ------------------------------------------------ -

3) - вы можете зациклить массив с помощью php foreach(); и получить желаемый результат.

function recursiveFunction($array) {
    foreach ($array as $val) {
            echo $val['comment_content'] . "\n";
            recursiveFunction($vals['child']);
    }
}
0 голосов
/ 18 января 2011

Рекурсия, как правило, будет вашим ответом, но альтернативой будет использование ссылок. Смотри http://www.ideashower.com/our_solutions/create-a-parent-child-array-structure-in-one-pass/

0 голосов
/ 18 января 2011

Если вы выводите данные для целей отладки и разработки, Krumo отлично подходит для получения легко читаемых результатов. Проверьте пример вывода .

0 голосов
/ 18 января 2011

Попробуйте использовать функцию var_dump .

...