如何扁平化多维数组?

在 PHP 中,是否有可能在不使用递归或引用的情况下展平(二维/多维)数组?

我只对值感兴趣,所以键可以被忽略,我在和的行中思考。array_map()array_values()


答案 1

PHP 5.3 开始,最短的解决方案似乎是使用新的闭包语法array_walk_recursive():

function flatten(array $array) {
    $return = array();
    array_walk_recursive($array, function($a) use (&$return) { $return[] = $a; });
    return $return;
}

答案 2

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