Эхо многомерного массива в 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
(
)
)
)
9 ответов
Похоже, вы пытаетесь записать только одно важное значение из каждого массива. Попробуйте рекурсивную функцию, например, так:
function RecursiveWrite($array) {
foreach ($array as $vals) {
echo $vals['comment_content'] . "\n";
RecursiveWrite($vals['child']);
}
}
Вы также можете сделать его немного более динамичным и иметь 'comment_content'
а также 'child'
строки передаются в функцию в качестве параметров (и продолжают передавать их при рекурсивном вызове).
Правильное, лучшее и чистое решение:
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/
Если вы хотите сохранить его как переменную, вы можете сделать:
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);
Очевидно, вы можете отформатировать по мере необходимости!
Есть несколько способов сделать это
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']);
}
}
Если вы выводите данные для целей отладки и разработки, Krumo отлично подходит для создания легко читаемых результатов. Проверьте пример выходных данных.
Рекурсия, как правило, будет вашим ответом, но альтернативой будет использование ссылок. См. http://www.ideashower.com/our_solutions/create-a-parent-child-array-structure-in-one-pass/