在PHP中,有没有可能不使用递归或引用而扁平化一个(双/多)维数组?
我只对可以忽略键的值感兴趣,我考虑的是array_map()
和array_values()
行。
您可以使用标准PHP库(SPL)来“隐藏”递归。
$a = array(1,2,array(3,4, array(5,6,7), 8), 9);
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($a));
foreach($it as $v) {
echo $v, " ";
}
打印
1 2 3 4 5 6 7 8 9
从PHP 5.3开始,最短的解决方案似乎是array_walk_recursive()
,使用了新的闭包语法:
function flatten(array $array) {
$return = array();
array_walk_recursive($array, function($a) use (&$return) { $return[] = $a; });
return $return;
}
二维阵列解
请尝试以下操作:
$array = your array
$result = call_user_func_array('array_merge', $array);
echo "<pre>";
print_r($result);
编辑:8月21-8-13
下面是适用于多维数组的解决方案:
function array_flatten($array) {
$return = array();
foreach ($array as $key => $value) {
if (is_array($value)){
$return = array_merge($return, array_flatten($value));
} else {
$return[$key] = $value;
}
}
return $return;
}
$array = Your array
$result = array_flatten($array);
echo "<pre>";
print_r($result);
参考:http://php.net/manual/en/function.call-user-func-array.php