PHP-如何获取一个n深的多重数组的所有数组值?

PHP-如何获取一个n深的多重数组的所有数组值?,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我试图得到多维数组的所有数组值,但问题是数组可以是1层深,也可以是2层,3层或4层,也就是n层深 以下是一些随机的内容,例如数组内容 e、 g.1 e、 g.2 我希望所有值都在新数组中。 到目前为止,我已经尝试过这样的东西 使用foreachloop循环n次,目前运行良好,但我想知道它在编程上是否正确,或者是否有任何其他方法比此方法更快或更好 PHP代码 <?php $out_final_array = array (); function foreach_values_endless(

我试图得到多维数组的所有数组值,但问题是数组可以是1层深,也可以是2层,3层或4层,也就是n层深

以下是一些随机的内容,例如数组内容

e、 g.1

e、 g.2

我希望所有值都在新数组中。 到目前为止,我已经尝试过这样的东西

使用
foreach
loop循环n次,目前运行良好,但我想知道它在编程上是否正确,或者是否有任何其他方法比此方法更快或更好

PHP代码

<?php
$out_final_array = array ();
function foreach_values_endless($array){
global $out_final_array;
    /* if its array */
    if(is_array($array)){
        /*run foreach loop to find more sub arrays */
        foreach ($array as $value){
            /* if value is an array send to own custom function */
            if(is_array($value)){
                $out_final_array[] = foreach_values_endless(array_values($value));
            }else{
            /* value is not an array*/
                $out_final_array[] = $value;
            }
        }
    }else{
        /* value is not array */
        $out_final_array[] = $array;
    }
}
您可以使用:


这应该适合您:

只需使用循环遍历所有值,如下所示:

$result = [];
array_walk_recursive($arr, function($v, $k)use(&$result){
    $result[] = $v;
});

print_r($result);

如果需要展平,另一种方法是使用SPL和:

旁注:无需使用该
全局
只需将其
返回
值即可:

function foreach_values_endless($array){
    $data = array();

    foreach ($array as $k => $v) {
        if (is_array($v)) {
            $data = array_merge($data, foreach_values_endless($v));
        } else {
            $data[] = $v;
        }
    }

    return $data;
}

是的,您构建的递归函数是正确的方法。如果我不使用全局函数,对foreach\u values\u的第二次调用($v)是否会使$data数组为空?然后从0@AMB不,在这一点上,你仍然在递归地获得深度,你没有试过吗?是的,我试过了,它的工作正如预期的那样。但是我有一个疑问。okie,刚才注意到我们正在数组_merge中调用我们的自定义函数,所以从函数返回的数组会在每个级别上合并到原始数组中。thanks@AMB是的,就是它,它被合并到它上面
$final = array();

array_walk_recursive($input, function($item, $key) use (&$final){
   $final[0][] = $item;
});
$result = [];
array_walk_recursive($arr, function($v, $k)use(&$result){
    $result[] = $v;
});

print_r($result);
$new_data = array();
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($data));
foreach($it as $v) {
    $new_data[] = $v;
}
function foreach_values_endless($array){
    $data = array();

    foreach ($array as $k => $v) {
        if (is_array($v)) {
            $data = array_merge($data, foreach_values_endless($v));
        } else {
            $data[] = $v;
        }
    }

    return $data;
}