PHP,通过其他(较小的)数组对多维数组进行排序/合并

时间:2016-08-02 14:00:20

标签: php arrays sorting multidimensional-array

我有这个数组:

$original=[];
$original[]=['value'=>'a','count'=>10];
$original[]=['value'=>'b','count'=>15];
$original[]=['value'=>'c','count'=>23];
$original[]=['value'=>'d','count'=>40];
$original[]=['value'=>'e','count'=>25];

此数组包含应位于$ original数组开头的项目:

$sort=['d','c'];

所以结果最终应该是:

[
    (int) 0 => [
        'value' => 'd',
        'count' => (int) 40
    ],
    (int) 1 => [
        'value' => 'c',
        'count' => (int) 23
    ],
    (int) 2 => [
        'value' => 'a',
        'count' => (int) 10
    ],
    (int) 3 => [
        'value' => 'b',
        'count' => (int) 15
    ],
    (int) 4 => [
        'value' => 'e',
        'count' => (int) 25
    ],
]

使用简单的for循环这是可行的,但有一种很好的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用usort

执行此操作
$priority = ['d', 'c'];
usort($original, function ($a, $b) use ($priority) {

    $prioA = array_search($a['value'], $priority);
    $prioB = array_search($b['value'], $priority);

    if ($prioA !== false && $prioB !== false) {
        if ($prioA < $prioB) return -1;
        return 1;
    }
    if ($prioA !== false) return -1;
    if ($prioB !== false) return 1;

    return 0;
});