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