Array
(
[0] => Array
(
[color] => Brown
)
[1] => Array
(
[color] => Green
)
[2] => Array
(
[width] => 34
)
)
我要这样做
[color] => Array
(
[0] => green
[1] => brown
)
[width] => Array
(
[0] => 34
)
)
我在尝试所有的阵列工具。但我做不到我想要的。
最佳答案
所以你想递归地合并数组…如果只有such an array_merge_recursive
功能存在…你为什么不试试这个:
$a = array(
array('colour' => 'green'),
array('colour' => 'blue'),
array('width' => 123)
);
$result = array();
foreach($a as $arr)
{
$result = array_merge_recursive($result, $arr);
}
var_dump($result);
这对我来说非常管用,as you can see for yourself here, too
是的,在给定的示例中
width
不是数组,因此可以得到:array('colour' => array('green','blue'),'width' => 123);
如果您需要将所有内容都作为一个数组,那么一个肮脏的修复方法就是使用强制转换:
foreach($result as $k => $v) $result[$k] = (array) $v;
第二次重新分配
$result
值,只将它们转换为数组,可以确保所有值显然都是数组。转换为数组的数组将保持不变,就像(int) 1
的计算结果仍为1一样。原始值(字符串、整数、双精度数,…)将在数组中包装,但对象将转换为数组,因此要小心。如果对象可能出现在此数组中:foreach($result as $k => $v) $result[$k] = is_array($v) ? $v : array($v);
可能是更安全的选择。然而,我选择不采用这种方法,因为我仍然觉得将所有内容打包成一个数组(只包含1个值)是非常乏味和愚蠢的……
对于那些对不可维护的代码有着奇怪偏好的人,下面的一行代码是一个压缩的,但是请注意,相同代码的自由工作示例:
foreach($a as $arr) $result = array_merge_recursive(isset($result) ? $result : array(), $arr);
这是对斯图尔特·韦克菲尔德建议使用“一行”的回应,这是我一直反对的,因为只要我活着和呼吸,顺便说一句……