php – 合并数组数组而不会丢失值
发布时间:2020-12-13 22:06:00 所属栏目:PHP教程 来源:网络整理
导读:Array( [0] = Array ( [color] = Brown ) [1] = Array ( [color] = Green ) [2] = Array ( [width] = 34 )) 我需要这样做 [color] = Array ( [0] = green [1] = brown )[width] = Array ( [0] = 34 ) ) 我正在尝试所有的阵列工具.但我不能让它像我想要的那样
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 没错,在给定的示例中,宽度不是数组,因此您得到: 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); 这是对斯图尔特韦克菲尔德的反应,他建议使用call_user_func_array,这是我一直反对的事情,只要我活着和呼吸,BTW …… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |