web-dev-qa-db-ja.com

PHPで多次元配列をエコーし​​ます

多次元配列があり、配列の要素を単純に "エコー"する方法を見つけようとしています。配列の深さは不明であるため、深くネストされる可能性があります。

以下の配列の場合、エコーする正しい順序は次のようになります。

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
                (
                )
        )
)
14
Jennifer

各配列から1つの重要な値のみを書き込もうとしているようです。次のような再帰関数を試してください:

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

もう少しダイナミックにして、'comment_content'および'child'文字列は、パラメーターとして関数に渡されます(そして、再帰呼び出しで渡されます)。

15
keithjgrant
<pre>
<?php print_r ($array); ?>
</pre>
29
Hilydrow

適切でより良い、そしてクリーンなソリューション:

_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)を、次のようにcurrent/mainクラスで呼び出すだけです。

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

ソース: http://snipplr.com/view/10200/recursively-traverse-a-multidimensional-array/

5
Dung

あなたがそれを変数として保存したいなら、あなたはできるでしょう:

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
Matt Lowden

print_r($arr)は通常、かなり読みやすい結果を提供します。

2
Osw

通常、再帰が答えになりますが、参照を使用することもできます。 http://www.ideashower.com/our_solutions/create-a-parent-child-array-structure-in-one-pass/ を参照してください

0
jhogendorn

デバッグや開発の目的でデータを出力している場合、 Krumo は読みやすい出力を生成するのに最適です。 出力例 を確認してください。

0
Matt V.

それを行うには複数の方法があります

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
Muhammad Tahir

var_dump 関数を使用してみてください。

0
ikostia