这可能是初学者的问题,但我已经阅读了较长时间的文档,我找不到任何解决方案.我以为我可以为每个维度使用implode然后将这些字符串重新组合在一起str_split
以创建新的简单数组.但是我永远不知道连接模式是否也不在值中,因此在执行之后str_split
我的原始值可能会中断.
combine($array1, $array2)
对于多维数组中的数组是否有类似的东西?
$array = your array $result = call_user_func_array('array_merge', $array); echo ""; print_r($result);参考:http://php.net/manual/en/function.call-user-func-array.php
这是另一种解决方案(适用于多维数组):
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 ""; print_r($result);
从php5.3开始,您现在可以使用splat运算符:`$ result = array_merge(... $ array);`https://www.php.net/manual/zh/migration56.new-features.php#migration56。新功能
2> Arnold Roa..:这是一条线,SUPER易于使用:
$result = array(); array_walk_recursive($original_array,function($v) use (&$result){ $result[] = $v; });在匿名函数/闭包中很容易理解.
$v
是你的价值$original_array
.
这是唯一一个在两级数组中为我工作的方法.
3> Luc M..:使用
array_walk_recursive
array()); array_walk_recursive($aNonFlat, create_function('&$v, $k, &$t', '$t->aFlat[] = $v;'), $objTmp); var_dump($objTmp->aFlat); /* array(11) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(6) [6]=> int(7) [7]=> int(8) [8]=> int(9) [9]=> int(10) [10]=> int(11) } */ ?>用PHP 5.5.9-1ubuntu4.24(cli)测试(内置:2018年3月16日12:32:06)
为什么这个答案提到使用`array_values()`?我根本看不到在答案中涉及的任何功能.
@jskilski对象(本例中为`$ objTmp`)自动通过引用传递; 数组不是.尝试使用匿名函数(http://php.net/manual/en/functions.anonymous.php)而不是`create_function`.
4> 小智..:// $array = your multidimensional array $flat_array = array(); foreach(new RecursiveIteratorIterator(new RecursiveArrayIterator($array)) as $k=>$v){ $flat_array[$k] = $v; }还记录了:http: //www.phpro.org/examples/Flatten-Array.html
注意:仅用于基元数组."RecursiveArrayIterator将所有对象视为拥有子对象,并尝试将它们递归到它们中." http://www.php.net/manual/en/class.recursivearrayiterator.php#106519
我知道这是旧的但仍然有用,但是$ k需要被一些独特的东西取代,例如计数器.如果内部数组中的名称与主要名称相同,则仅使用$ k会导致元素被删除.
5> chaos..:function flatten_array($array, $preserve_keys = 0, &$out = array()) { # Flatten a multidimensional array to one dimension, optionally preserving keys. # # $array - the array to flatten # $preserve_keys - 0 (default) to not preserve keys, 1 to preserve string keys only, 2 to preserve all keys # $out - internal use argument for recursion foreach($array as $key => $child) if(is_array($child)) $out = flatten_array($child, $preserve_keys, $out); elseif($preserve_keys + is_string($key) > 1) $out[$key] = $child; else $out[] = $child; return $out; }
6> SamGoody..:PHP的用户评论(简化)和此处的另一种方法:
function array_flatten_recursive($array) { if (!$array) return false; $flat = array(); $RII = new RecursiveIteratorIterator(new RecursiveArrayIterator($array)); foreach ($RII as $value) $flat[] = $value; return $flat; }这种方法的最大好处是它可以跟踪递归的深度,如果在展平时需要它.
这将输出:$array = array( 'A' => array('B' => array( 1, 2, 3)), 'C' => array(4, 5) ); print_r(array_flatten_recursive($array)); #Returns: Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
注意:仅用于基元数组."RecursiveArrayIterator将所有对象视为拥有子对象,并尝试将它们递归到它们中." http://www.php.net/manual/en/class.recursivearrayiterator.php#106519