цикл по массиву массивов массивов Переполнение стека

$myDecodedArray = json_decode($mystring,true);
var_dump($myDecodedArray) ;

Я использовал json_decode для строки, затем использовал var_dump, чтобы помочь мне понять структуру моего массива «myDecodedArray». Я получил следующее

array(2) {

["red"]=> array(1)
{ ["10729,10730,10732"]=> array(13)
{
["-2.75"]=> array(2) { [0]=> string(5) "+1.75" [1]=> string(5) "+1.50" }
["-2.50"]=> array(3) { [0]=> string(5) "+2.00" [1]=> string(4) "0.00" [2]=> string(5) "-0.50" }
["-2.25"]=> array(3) { [0]=> string(5) "+2.00" [1]=> string(5) "-1.75" [2]=> string(5) "-2.00" }
["-2.00"]=> array(3) { [0]=> string(5) "+2.00" [1]=> string(5) "-2.00" [2]=> string(5) "-2.25" }
["-1.75"]=> array(3) { [0]=> string(5) "+2.00" [1]=> string(4) "0.00" [2]=> string(5) "-2.25" }
["-1.50"]=> array(3) { [0]=> string(5) "+2.00" [1]=> string(4) "0.00" [2]=> string(5) "-2.25" }
["-1.25"]=> array(1) { [0]=> string(5) "-2.25" }
["-1.00"]=> array(2) { [0]=> string(5) "+2.00" [1]=> string(5) "-2.25" }
["-0.75"]=> array(2) { [0]=> string(5) "+2.00" [1]=> string(5) "-2.25" }
["-0.50"]=> array(2) { [0]=> string(5) "+2.00" [1]=> string(5) "-2.25" }
["-0.25"]=> array(1) { [0]=> string(5) "-2.25" }
["0.00"]=> array(3)  { [0]=> string(5) "+1.75" [1]=> string(4) "0.00" [2]=> string(5) "-2.25" }
["+0.25"]=> array(2) { [0]=> string(5) "-2.00" [1]=> string(5) "-2.25" }
}
}

["gray"]=> array(1)
{ ["10730,10731"]=> array(8)
{
["-1.00"]=> array(4) { [0]=> string(5) "+0.25" [1]=> string(4) "0.00" [2]=> string(5) "-0.25" [3]=> string(5) "-0.50" }
["-0.75"]=> array(5) { [0]=> string(5) "+0.75" [1]=> string(5) "+0.50" [2]=> string(5) "+0.25" [3]=> string(5) "-0.50" [4]=> string(5) "-0.75" }

["-0.50"]=> array(2) { [0]=> string(5) "+0.75" [1]=> string(5) "-0.75" }
["-0.25"]=> array(2) { [0]=> string(5) "+0.75" [1]=> string(5) "-0.75" }
["0.00"]=> array(11) { [0]=> string(5) "+3.25" [1]=> string(5) "+3.00" [2]=> string(5) "+2.75" [3]=> string(5) "+2.50" [4]=> string(5) "+2.25" [5]=> string(5) "+1.00" [6]=> string(5) "+0.75" [7]=> string(5) "-0.50" [8]=> string(5) "-0.75" [9]=> string(5) "-1.50" [10]=> string(5) "-1.75" }

["+0.25"]=> array(2) { [0]=> string(5) "+1.00" [1]=> string(5) "-0.50" }
["+0.50"]=> array(2) { [0]=> string(5) "+1.00" [1]=> string(5) "-0.50" }
["+0.75"]=> array(2) { [0]=> string(5) "+1.00" [1]=> string(5) "-0.50" }
}
}
}

что я получил, это массив массивов массивов массивов (4 уровня).
Я хочу просмотреть каждый их массив и прочитать информацию внутри него. вот мой код до сих пор:

function read_array($arrayOfArrayes, $level = 0) {
if (is_array($arrayOfArrayes)) {
echo ' * '.$arrayOfArrayes.' (level: '.$level.')<br>';
}
elseif (!is_array($arrayOfArrayes)) {
echo $arrayOfArrayes.' (level: '.$level.')<br>';
}
$level++;
foreach ($arrayOfArrayes as $subArray) {
read_array($subArray, $level);
}
}

read_array($myDecodedArray);

здесь вывод моей функции.
функция перебирает массив массивов и показывает мне каждый уровень, но показывает информацию только для последнего уровня «4», но я хочу получить информацию внутри каждого уровня. Я знаю, что это происходит из-за (! Is_array) условия. Но я не знаю, как это сделать по-другому. Заранее спасибо.

0

Решение

Вы были практически там. Получите пару ключ / значение в цикле foreach, чтобы вы могли определить массив верхнего уровня и вывести его. Чтобы перечислить все остальное по порядку, вызовите функцию рекурсивно сразу после того, как вы выдали ключ. Вам также не нужно явно выполнять проверку! Is_array, поскольку это подразумевается после проверки is_array.

function read_array($arrayOfArrayes, $level = 0) {
foreach ($arrayOfArrayes as $key => $val) {
if (is_array($val)) {
echo ' * '.$key.' (level: '.$level.')<br>';
read_array($val, ++$level);
}
else {
echo $val.' (level: '.$level.')<br>';
}
}
}

read_array($myDecodedArray);
0

Другие решения

Других решений пока нет …