多次元配列があり、配列の要素を単純に "エコー"する方法を見つけようとしています。配列の深さは不明であるため、深くネストされる可能性があります。
以下の配列の場合、エコーする正しい順序は次のようになります。
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
(
)
)
)
各配列から1つの重要な値のみを書き込もうとしているようです。次のような再帰関数を試してください:
function RecursiveWrite($array) {
foreach ($array as $vals) {
echo $vals['comment_content'] . "\n";
RecursiveWrite($vals['child']);
}
}
もう少しダイナミックにして、'comment_content'
および'child'
文字列は、パラメーターとして関数に渡されます(そして、再帰呼び出しで渡されます)。
<pre>
<?php print_r ($array); ?>
</pre>
適切でより良い、そしてクリーンなソリューション:
_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/
あなたがそれを変数として保存したいなら、あなたはできるでしょう:
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);
もちろん、必要に応じてフォーマットできます!
print_r($arr)
は通常、かなり読みやすい結果を提供します。
通常、再帰が答えになりますが、参照を使用することもできます。 http://www.ideashower.com/our_solutions/create-a-parent-child-array-structure-in-one-pass/ を参照してください
それを行うには複数の方法があります
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']);
}
}
_
var_dump 関数を使用してみてください。