PHP-如何获取一个n深的多重数组的所有数组值?
我试图得到多维数组的所有数组值,但问题是数组可以是1层深,也可以是2层,3层或4层,也就是n层深 以下是一些随机的内容,例如数组内容 e、 g.1 e、 g.2 我希望所有值都在新数组中。 到目前为止,我已经尝试过这样的东西 使用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(
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;
}