Как сканировать вложенные массивы в php?

Я хотел бы знать, как я могу полностью перебрать массив (как с foreach), чтобы переставить данные. Однако этот массив содержит массивы, и эти массивы содержат массивы и т. Д. И т. Д. Например:

$data= array(
'key1' => array(
'key2' => 'value2',
'key3' => 'value3'
),
'key4' => array(
'key5' => 'value5',
'key6' => 'value6'
)
)

В этом примере я знаю, что я мог бы просто использовать два foreach, чтобы пройти через него и выполнить операцию, необходимую для перестановки данных, но в моем случае я не знаю, сколько массивов вложено в $data так как я не сделал это, и это слишком большое для меня, чтобы просто посмотреть и посчитать.

-1

Решение

Есть много возможностей.

Вы можете использовать рекурсию:

function scan($array) {
foreach ($array as $item) {
if (is_array($item) {
scan($item);
// ...
}
// ...
}
}

или если вы хотите избежать рекурсии, вы можете преобразовать рекурсию в цикл

function scan($array) {
$stack = [$array];
do {
foreach (array_shift($stack) as $item) {
if (is_array($item) {
$stack[] = $item;
}
// ...
}
} while (count($stack) > 0);
}

или что-то другое — зависит от ваших потребностей

1

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

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

function checkArray($array, $value){
foreach($array as $entry){
if(is_array($entry)){
checkArray($entry, $value);
} else {
// Do your check and logic here.
}
}
}
$example = array( 'key' => array( 'key1' => 'value1', 'key2' => 'value2'), 'key4' => 'value4');
checkArray($example, 'value4');
2

Ты можешь использовать array_walk_recursive () функция для «сканирования» массивов. Эта функция превратится в более глубокие массивы. Вы получите обратно каждый член массива.

$arr = [[["element1", "element2", ["element3"]]],["element4"]];
array_walk_recursive($arr, 'test_print');
function test_print($item, $key)
{
echo "$key holds $item\n";
}
2
По вопросам рекламы [email protected]