2015-11-09 3 views
-1

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

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

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

+1

Что вы подразумеваете под «сканированием»? Извлечь значения? Считать значения? Вам, вероятно, понадобится рекурсивная функция. – bfranco

+0

Ваш учитель арфы о рекурсии по причине. – Sammitch

ответ

1

Существует много возможностей.

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

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

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

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

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

2

Вы пишете свой цикл в функции, вы можете позвонить, если какой-либо из детей массив, например, так:

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() функции «Scan» массивы. Эта функция будет возвращаться в более глубокие массивы. Вы вернетесь к каждому члену массива.

$arr = [[["element1", "element2", ["element3"]]],["element4"]]; 
array_walk_recursive($arr, 'test_print'); 
function test_print($item, $key) 
{ 
    echo "$key holds $item\n"; 
} 
Смежные вопросы