如何在PHP中组合2个关联数组,以便我们在所有情况下不覆盖任何重
我有两个关联数组,它们有很多内容相同,所以我想以这样一种方式组合这两个数组,如果我在数组1中有一个数组,而数组2中的数组不是数组3,那么我应该有两个数组.
我已经尝试使用array_merge但它会覆盖第一个数组中的条目,如果在第二个数组中有任何重复,我也尝试使用,但它给我致命的错误说致命错误:不支持的操作数类型在/home/code.php然后我试过干 (array)$ar3 =(array)$ar1(array)$ar2,似乎加起来.我想知道这是正确的方法,也是为什么最初我有致命的错误,而不是像我已经定义$ar3,$ar2,$ar1作为数组类型的工作. $orders = new Order(); $prospectOffers = $orders->getOrder($orderConfNumber); $prospectOffersResult = json_decode($prospectOffers,true); $shoppingBasket = $cart->getCartItems(); var_dump($prospectOffersResult); // Both are arrays var_dump($shoppingBasket); //Both are arrays (array)$result = (array)$prospectOffersResult+(array)$shoppingBasket; 谢谢.
$array1 $array2将返回两个数组的并集.如果它们是关联的,则如果键碰撞,则左操作数的值将是首选的.因此,这不是您想要的解决方案,因为值将丢失.
语句没有错,只要这两个变量都被理解为数组.您的致命错误可能发生,因为一个变量实际上是一个对象,并且可能会使用var_dump错误.通过添加类型转换,您强制PHP强制将两个变量强制转换为数组.如果一个变量是一个对象,它会有这样的效果: 从PHP.net Manual
现在有两个数组可以添加,PHP没有什么可怕的.请注意,尽管投射两个操作数很重要,但是将您所分配的变量转换为无意义.表达式(数组)$foo不会修改$foo,而是返回一个新值.对于需要声明变量的语言,这可能不是直观的,但是PHP不是这样的语言. 在其他问题上,数组中不能有两个相同的键.这将使得无法对数组进行索引,因为返回的正确值将变得模糊.如果您希望在无损管理器中组合两个数组,则必须使用更复杂的数据结构. 我的建议是使用一个数组,其中: $a1 = array('a' => 1,'b' => 2,'c' => 3); $a2 = array('a' => 3,'d' => 2); 会变成: $a3 = array( 'a' => array(1,3),'b' => array(2,2),'c' => array(3),'d' => array(2) ); 而且订单没有确定.结构唯一显着的变化是所有的第一个值都是数组,允许重复键的值被累积.此功能可以完成任务,并且可以使用更好的名称: // array(array) lossless_array_merge([$array1 [,$array2 [,$...]]]) function lossless_array_merge() { $arrays = func_get_args(); $data = array(); foreach ($arrays as $a) { foreach ($a as $k => $v) { $data[$k][] = $v; } } return $data; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |