如何在php中扫描嵌套数组?

如何在php中扫描嵌套数组?,php,arrays,layer,Php,Arrays,Layer,我想知道如何通过数组(比如foreach)完全循环以重新排列数据。但是,此数组包含数组,而这些数组包含数组等。例如: $data= array( 'key1' => array( 'key2' => 'value2', 'key3' => 'value3' ), 'key4' => array(

我想知道如何通过数组(比如foreach)完全循环以重新排列数据。但是,此数组包含数组,而这些数组包含数组等。例如:

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

在这个例子中,我知道我可以使用two-foreach循环遍历它,并执行重新排列数据所需的操作,但在我的例子中,我不知道有多少数组嵌套在
$data
中,因为我没有创建它,而且它太大了,我无法只查看和计数其中的子元素是一个数组,如下所示:

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');
您可以使用该函数“扫描”阵列。此函数将递归到更深的数组中。您将返回数组中的每个成员

$arr = [[["element1", "element2", ["element3"]]],["element4"]];
array_walk_recursive($arr, 'test_print');
function test_print($item, $key)
{
    echo "$key holds $item\n";
}

有很多可能性

您可以使用递归:

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);
}

或者不同的东西-取决于你的需要

你说的“扫描”到底是什么意思?提取值?计数值?你可能需要一个递归函数。你的老师喋喋不休地谈论递归是有原因的。