php - 将 2 个关联数组合并为 1 个

标签 php arrays foreach

我在合并数组时遇到问题,并且不确定自己做错了什么。考虑以下代码:

$array1 = [
    [ 'job' => '123', 'who' => 'Alpha' ],
    [ 'job' => '789', 'who' => 'Bravo' ]
];

$array2 = [
    [ 'job' => '123', 'when' => 'Today' ]
];

$desiredArray = [
    [ 'job' => '123', 'who' => 'Alpha', 'when' => 'Today' ],
    [ 'job' => '789', 'who' => 'Bravo', 'when' => '' ]
];

这是我一直在尝试做的事情:

$newArray = [];

foreach ($array2 as $row) {
    foreach ($array1 as $record) {
        if ($row['job'] === $record['job']) {
            $tempArray = [
                'when' => $row['when']
            ];
            $newRecord = array_merge($record, $tempArray);
            array_push($newArray, $newRecord);
        };
    };
};

这有点管用,但问题是当没有匹配项时,它仍然需要将原始记录放入我的新数组中。我试过将一些东西放在 if 语句之外,但我的循环卡住了。感谢您的帮助。

最佳答案

如果您使用 job 作为键来提取数组,那就容易多了。只需循环第一个数组并在第二个数组中检查相同的键并合并:

$a1 = array_column($array1, null, 'job');
$a2 = array_column($array2, null, 'job');

foreach($a1 as $key => $val) {
    $result[] = isset($a2[$key]) ? $val + $a2[$key] : $val;
}

或与内置相同:

$result = array_replace_recursive(array_column($array1, null, 'job'),
                                  array_column($array2, null, 'job'));

如果你需要重新索引:

$result = array_values($result);

关于php - 将 2 个关联数组合并为 1 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42163343/

相关文章:

javascript - 当数组的两个元素是相同字符串值时条件检查的问题

ruby - 在 Ruby 中创建二维数组和访问子数组

javascript - 删除数组中相同的项

php - 查找文件夹中的所有文件并按文件名的一部分进行分组

PHP MVC类根据url决定执行什么方法

javascript - 更改文本字段货币类型

php - Facebook 业务 PHP SDK : Cannot access an object not managed by the business owning this app

php - Doctrine 不允许 ResultSetMappingBuilder 工作

c# - 在 IEnumerable 上使用扩展方法的 Foreach

Java:用迭代器删除所有对象