我已经尝试使用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;
谢谢.
语句没有错,只要这两个变量都被理解为数组.您的致命错误可能发生,因为一个变量实际上是一个对象,并且可能会使用var_dump错误.通过添加类型转换,您强制PHP强制将两个变量强制转换为数组.如果一个变量是一个对象,它会有这样的效果:
“If an object is converted to an array,
the result is an array whose elements
are the object’s properties. The keys
are the member variable names,with a
few notable exceptions: integer
properties are unaccessible; private
variables have the class name
prepended to the variable name;
protected variables have a ‘*’
prepended to the variable name. These
prepended values have null bytes on
either side.”
现在有两个数组可以添加,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; }