繁体   English   中英

php中两个关联数组的键的数组合并?

[英]Array merge on key of two associative arrays in php?

如何将这两个数组合并在一起?

Array
(
[0] => Array
    (
        [id] => 5
        [cnt] => 14
    )

[1] => Array
    (
        [id] => 8
        [cnt] => 2
    )

)

Array
(
    [0] => Array
        (
            [id] => 8
            [binding] => hardcover
        )

    [1] => Array
        (
            [id] => 5
            [binding] => softcover
        )
)

预期结果是:

Array
    (
        [0] => Array
            (
                [id] => 5
                [binding] => softcover
                [cnt] => 14
            )

        [1] => Array
            (
                [id] => 8
                [binding] => hardcover
                [cnt] => 2
            )

    )

这两个数组的合并应该发生在 [id] 值上,而不是任何类型的数组上。 我怎样才能用 php 快速做到这一点?

$output = array();

$arrayAB = array_merge($arrayA, $arrayB);
foreach ( $arrayAB as $value ) {
  $id = $value['id'];
  if ( !isset($output[$id]) ) {
    $output[$id] = array();
  }
  $output[$id] = array_merge($output[$id], $value);
}

var_dump($output);

或者,如果您想重置输出的键,只需执行以下操作:

$output = array_values($output);
  1. 合并输入数组,然后
  2. 循环行并使用数组联合运算符 ( + ) 合并关联的行数据。 数组联合运算符只能与关联的非数字键控数组一起使用。

第一次遇到给定的id时,结果数组中还没有“组”。 为避免因尝试将行数据与未声明的变量合并而生成警告,请使用空合并运算符 ( ?? ) 回退到空数组。

下面的代码段将非常高效,因为它不进行迭代函数调用。

如果您不希望结果数组中的第一级键,则调用array_values()重新索引数组。

代码:(演示

$a1 = [
    ['id' => 5, 'cnt' => 14],
    ['id' => 8, 'cnt' => 2],
];
$a2 = [
    ['id' => 8, 'binding' => 'hardcover'],
    ['id' => 5, 'binding' => 'softcover'],
];

$result = [];
foreach (array_merge($a1, $a2) as $row) {
    $result[$row['id']] = ($result[$row['id']] ?? []) + $row;
}
var_export(array_values($result));

输出:

array (
  0 => 
  array (
    'id' => 5,
    'cnt' => 14,
    'binding' => 'softcover',
  ),
  1 => 
  array (
    'id' => 8,
    'cnt' => 2,
    'binding' => 'hardcover',
  ),
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM