PHP按键合并数组

时间:2014-03-02 16:58:11

标签: php merge

我有2个阵列。

商品数组和分隔符数组。

$goods = [
    [
        'good_id' => '1',
        'name' => 'Good 1',
    ],
    [
        'good_id' => '24',
        'name' => 'Good 24',
    ],
    [
        'good_id' => '335',
        'name' => 'Good 335',
    ],
    [
        'good_id' => '1986',
        'name' => 'Good 1986',
    ],
];

$separators = [
    [
        'id' => '1',
        'good_id' => '0',
        'name' => 'Separator 1',
    ],
    [
        'id' => '2',
        'good_id' => '0',
        'name' => 'Separator 2',
    ],
    [
        'id' => '3',
        'good_id' => '4',
        'name' => 'This separator should set after 4 good_id and before 5 good_id if exists',
    ],
    [
        'id' => '4',
        'good_id' => '47',
        'name' => 'This separator should set after 47 good_id and before 48 good_id if exists',
    ],
    [
        'id' => '5',
        'good_id' => '9999',
        'name' => 'This separator should set after 9999 good_id and before 10000 good_id if exists',
    ],
    [
        'id' => '6',
        'good_id' => '9999',
        'name' => 'This separator should set after 9999 good_id and AFTER prevously separator AND before 10000 good_id if exists',
    ]

];

我需要通过good_id合并这个数组。 sperators good_id应该在good_id之后设置商品good_id。

$merged = [
    [
        'id' => '1',
        'good_id' => '0',
        'name' => 'Separator 1',
    ],
    [
        'id' => '2',
        'good_id' => '0',
        'name' => 'Separator 2',
    ],
    [
        'good_id' => '1',
        'name' => 'Good 1',
    ],
    [
        'id' => '3',
        'good_id' => '4',
        'name' => 'This separator should set after 4 good_id and before 5 good_id if exists',
    ],
    [
        'good_id' => '24',
        'name' => 'Good 24',
    ],
    [
        'id' => '4',
        'good_id' => '47',
        'name' => 'This separator should set after 47 good_id and before 48 good_id if exists',
    ],
    [
        'good_id' => '335',
        'name' => 'Good 335',
    ],
    [
        'good_id' => '1986',
        'name' => 'Good 1986',
    ],
    [
        'id' => '5',
        'good_id' => '9999',
        'name' => 'This separator should set after 9999 good_id and before 10000 good_id if exists',
    ],
    [
        'id' => '6',
        'good_id' => '9999',
        'name' => 'This separator should set after 9999 good_id and AFTER prevously separator AND before 10000 good_id if exists',
    ]

];

1 个答案:

答案 0 :(得分:0)

据我所知,您需要合并两个数组并按good_id子键对结果进行排序。假设这些数组没有具有相同good_id个键的记录,您可以使用这个简单的解决方案:

$merged = array_merge($goods, $separators);
usort($merged, function ($a, $b) {
    return $a['good_id'] < $b['good_id']? -1 : 1;
});
相关问题