提问者:小点点

如何扁平化一个多维数组?


在PHP中,有没有可能不使用递归或引用而扁平化一个(双/多)维数组?

我只对可以忽略键的值感兴趣,我考虑的是array_map()array_values()行。


共3个答案

匿名用户

您可以使用标准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