我有两个关联数组,它们有很多内容相同,所以我想以这样的方式组合这两个数组:如果我a
在数组1和a
数组2中比在数组3中我应该有两个条目a's
而不是1.
我已经尝试过使用array_merge但它会覆盖第一个数组中的条目,如果第二个数组中有任何重复,我也尝试过使用+
但是它给了我致命的错误Fatal error: Unsupported operand types in /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;
Run Code Online (Sandbox Code Playgroud)
谢谢.
eri*_*sco 14
$array1 + $array2
将返回两个数组的并集.如果它们是关联的,如果键冲突,则首选左操作数的值.因此,这不是您想要的解决方案,因为价值将会丢失.
如果两个变量都被理解为数组,则该语句没有任何问题.您的致命错误可能是因为一个变量实际上是一个对象,并且可能使用var_dump将其误认为是错误的.通过添加类型转换,您强制PHP将两个变量强制转换为数组.如果一个变量是一个对象,它会产生这种效果:
"如果一个对象被转换为一个数组,那么结果就是一个数组,其元素是对象的属性.这些键是成员变量名,有一些值得注意的例外:整数属性是不可访问的;私有变量的类名前置于变量名;受保护变量在变量名前加上'*'.这些前置值在任一侧都有空字节."
现在要添加两个数组,PHP没有什么可惊慌的.请注意,虽然转换两个操作数+
很重要,但是转换为您指定的变量是没有意义的.该表达式(array)$foo
不会修改$ foo,而是返回一个新值.对于需要声明变量的语言,这可能不直观,但PHP不是这样的语言.
在另一个问题上,数组中不能有两个相同的键.这将使得无法索引数组,因为返回的正确值将变得模糊不清.如果您希望在无损庄园中组合两个阵列,则必须使用更复杂的数据结构.
我的建议是使用数组数组,其中:
$a1 = array('a' => 1, 'b' => 2, 'c' => 3);
$a2 = array('a' => 3, 'b' => 2, 'd' => 2);
Run Code Online (Sandbox Code Playgroud)
会变成:
$a3 = array(
'a' => array(1, 3),
'b' => array(2, 2),
'c' => array(3),
'd' => array(2)
);
Run Code Online (Sandbox Code Playgroud)
订单未确定.对结构唯一值得注意的改变是所有第一个值都是数组,允许累积重复键的值.此功能执行任务,可能使用更好的名称:
// 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;
}
Run Code Online (Sandbox Code Playgroud)
array_merge()
仅当两个数组包含相同的字符串键时才会覆盖重复项:
如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个值。但是,如果数组包含数字键,则后面的值不会覆盖原始值,而是会附加到后面。
我相信这种行为是预期的。你会如何处理这个案子?这么说吧
$arr1 = array('a' => 1);
$arr2 = array('a' => 2);
Run Code Online (Sandbox Code Playgroud)
数组合并后可接受的输出是什么?
归档时间: |
|
查看次数: |
14749 次 |
最近记录: |