Php 按值合并两个数组
我有这个阵列:Php 按值合并两个数组,php,arrays,sorting,Php,Arrays,Sorting,我有这个阵列: $mergedItems = array( 0 => array( 'id_item' => 'AZ-110' 'amount' => 12 ), 1 => array( 'id_item' => 'BZ-110', 'amount' => 13 ), 2 => array( 'id_item' => 'BZ-210', 'amount' => 28 ),
$mergedItems = array(
0 => array(
'id_item' => 'AZ-110'
'amount' => 12
),
1 => array(
'id_item' => 'BZ-110',
'amount' => 13
),
2 => array(
'id_item' => 'BZ-210',
'amount' => 28
),
3 => array(
'id_item' => 'CZ-291',
'amount' => 11
)
);
这个阵列:
$mergedItems = array(
0 => array(
'id_item' => 'AZ-110'
'amount' => 12
),
1 => array(
'id_item' => 'BZ-110',
'amount' => 13
),
2 => array(
'id_item' => 'BZ-210',
'amount' => 28
),
3 => array(
'id_item' => 'CZ-291',
'amount' => 11
)
);
现在我想要的是按照id_item值对第一个数组进行排序,以便与第二个数组的值匹配相同的顺序
结果数组必须包括第二个数组的所有值和第一个数组的所属数量值。钥匙不能留着
我不能使用array\u merge,因为第二个数组有更多的动态项,所以我只需要第二个数组中在第一个数组中设置的所有项
有人明白我的意思吗?我正在寻找一种快速、无污染的方法来获得预期的结果
/编辑:
预期阵列:
$detailedItems = array(
0 => array(
'number' => 'AZ-110',
'amount' => 12
),
1 => array(
'number' => 'BZ-110',
'amount' => 13
),
2 => array(
'number' => 'CZ-291',
'amount' => 11
),
3 => array(
'number' => 'BZ-210',
'amount' => 28
)
);
据我所知,实际上没有一种非脏的单行方式来实现这一点,但这个函数应该可以工作:
$out = array();
foreach ($mergedItems as $key => $value) {
if (array_key_exists($key, $detailedItems)) { // Make sure it exists to prevent errors
$out[$key] = $detailedItems[$key] + array('amount' => $value['amount']);
} else {
$out[$key] = $value['amount'];
}
}
print_r($out);
PHP 5.5解决方案:
对于5.3,您可以尝试以下代码:
foreach ($mergedItems as $item) {
$merged[$item['id_item']] = array('amount' => $item['amount']);
}
foreach ($items as $item)
{
$detailedItems[] = array_merge($item, $merged[$item['number']]);
}
输出
您能给我们一个您期望的样本数组输出吗?我已经测试过了,似乎工作得很好,输出的正是您所要求的。@ConnorPeet:这不可能按要求工作,因为它迭代$mergedItems作为其主要数据源。该问题明确指出,当局应就哪些物品应归还以及以何种顺序归还物品作出规定$mergedItems只包含哑数据。此处的输出与您的不同:/$New有两个包含null的键,$merged有4个数组,其中键是仅包含金额的id\u项值value@user2610087我只是复制并粘贴您的$mergedItems和$items数组这一个缺少第一个数组的amount值:/问题是第一个和第二个数组中的项目的切换顺序。:/因此,我可以在foreach中遍历$itemMap,通过使用foreach键获得第一个数组的值,这是正确的,但是第二个数组的最后两个项会被动态地删除,因此我不知道如何获得第二个数组的必要值,以便将它们附加到新构建的oneThanks!这帮了我的忙。我使用您的方法遍历$itemMap并制作了如下内容:$new[$itemMapKey]=$items[$cartNbr][self::array_multisearch$key,$items[$cartNbr];它使用了这个函数:私有静态函数array\u multisearch$id,$array{foreach$array as$key=>$val{if$val['number']===id{return$key;}}return null;}
$itemMap = array_flip(array_column($mergedItems, 'id_item'));
$result = array_map(
function($i) use($itemMap, $mergedItems) {
return $mergedItems[$itemMap[$i['number']]];
},
$items);
print_r($result);
$itemMap = array_flip(array_map(
function($i) { return $i['id_item']; },
$mergedItems));
[
'AZ-100' => 0,
'BZ-110' => 1,
'BZ-210' => 2,
// etc
]
foreach ($mergedItems as $item) {
$merged[$item['id_item']] = array('amount' => $item['amount']);
}
foreach ($items as $item)
{
$detailedItems[] = array_merge($item, $merged[$item['number']]);
}
var_dump($detailedItems);
array (size=4)
0 =>
array (size=2)
'number' => string 'AZ-110' (length=6)
'amount' => int 12
1 =>
array (size=2)
'number' => string 'BZ-110' (length=6)
'amount' => int 13
2 =>
array (size=2)
'number' => string 'CZ-291' (length=6)
'amount' => int 11
3 =>
array (size=2)
'number' => string 'BZ-210' (length=6)
'amount' => int 28