CakePHP 最快更好的合并数组

问题描述 投票:0回答:2

我有两个数组(相同型号),如下所示:

Array (
    [0] => Array (
        [id] => 17
        [user_id] => 1
    )
    [1] => Array (
        [id] => 8
        [user_id] => 1
    )
    [2] => Array  (
        [id] => 9
        [user_id] => 1
    )
)

Array (
    [0] => Array (
        [Post] => Array (
            [id] => 9
            [name] => name1
            [slug] => slug1
        )
    )
    [1] => Array (
        [Post] => Array (
            [id] => 17
            [name] => other name
            [slug] => other_slug
        )
    )
    [2] => Array (
        [Post] => Array (
            [id] => 8
            [name] => lorem
            [slug] => lorem_slug
        )
    )
)

如何按字段

id
合并这两个数组,格式与第一个数组相同?

php sorting cakephp merge array-merge
2个回答
1
投票

我仍在寻找一种更优雅的解决方案,但这似乎可行。

$a1 = [
    ['id' => 17, 'user_id' => 1],
    ['id' => 8, 'user_id' => 2],
    ['id' => 9, 'user_id' => 3],
];

$a2 = [
    ['Post' => ['id' => 9, 'name' => 'name1', 'slug' => 'slug1']],
    ['Post' => ['id' => 17, 'name' => 'other name', 'slug' => 'other_slug']],
    ['Post' => ['id' => 8, 'name' => 'lorem', 'slug' => 'lorem_slug']],
];
$a2 = Hash::extract($a2, '{n}.Post');

foreach ($a1 as $key => $value) {
    $a1['id_' . $value['id']] = $value;
    unset($a1[$key]);
}

foreach ($a2 as $key => $value) {
    $a2['id_' . $value['id']] = $value;
    unset($a2[$key]);
}

$a3 = array_values(array_replace_recursive($a1, $a2));
debug($a3);

第二种更简单的方法:

foreach ($a1 as &$item) {
    foreach ($a2 as $item2) {
        if ($item2['Post']['id'] == $item['id']) {
            $item = array_merge($item, $item2['Post']);
        }
    }
}

0
投票

我现在用的是这样的:

foreach ($a1 as $order => $result) {
    $a1[$order] = array_merge($a1[$order], current(Hash::extract($a2, '{n}.Post[id=' . $result['id'] . ']')));
}
© www.soinside.com 2019 - 2024. All rights reserved.