Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 返回数组中深度未知的变量_Php_Arrays_Loops - Fatal编程技术网

Php 返回数组中深度未知的变量

Php 返回数组中深度未知的变量,php,arrays,loops,Php,Arrays,Loops,我试图编写一个循环,它将遍历any深度数组,并将键/值对分配给变量。问题是函数是递归的,所以当我最终必须返回变量时,它会终止循环,只剩下第一次迭代。这是密码。有什么帮助吗 function recursive($a, $l = 1){ if(is_array($a)){ foreach($a as $k => $v){ if(is_array($v)){ recursive($v, $l + 1);

我试图编写一个循环,它将遍历any深度数组,并将键/值对分配给变量。问题是函数是递归的,所以当我最终必须返回变量时,它会终止循环,只剩下第一次迭代。这是密码。有什么帮助吗

function recursive($a, $l = 1){
    if(is_array($a)){
        foreach($a as $k => $v){
            if(is_array($v)){
                recursive($v, $l + 1);
            }else{
                $keys[] = $k;
                $values[] = $v;
            }       
        }
    }
    return array($keys, $values);
}

一个选项是在
do while
循环中调用函数,如果函数找到匹配项,则将其删除

$copy = $array;
do{
    $find = false;
    $result = recursive($copy, $find);
}while($find)

function recursive(&$a, &$find, $l = 1){
    if(is_array($a)){
        foreach($a as $k => $v){
            if(is_array($v)){
                recursive($v, $find, $l + 1);
            }else{
                $keys[] = $k;
                $values[] = $v;
                unset($a[$k]);
                $find = true;
            }       
        }
    }
    return array($keys, $values);
}

使用PHP的数组\u walk\u递归函数:

$data = array('a' => 3, 'b' => array('d' => 5)); //this is your array of any depth
$keys = array();
$values = array();

array_walk_recursive($data, function($v, $k) use (&$keys, &$values) {
    $keys[] = $k;
    $values[] = $v;
});

print_r($keys);
print_r($values);

完美的非常感谢!