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

马塞尔·恩布拉佐德(Marcel Emblazoned)

我有这个数组:

$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循环是可行的,但是有没有很好的方法呢?

NDM

您可以使用 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;
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章