根据另一个数组订购多阵列

时间:2018-03-15 17:25:40

标签: php arrays sorting

我有一个像

这样的数组
$originalArray = [
    ...
    [
    ...
    'attribute' => 'value'
    ....
    ],
    [
    ...
    'attribute' => 'year'
    ....
    ],
    [
    ...
    'attribute' => 'car'
    ....
    ],
    ....
];

我有另一个数组,它定义了前一个数组的所需顺序。

$desiredOrderArray = ['car', 'value', 'year'];

我想要的输出是

$newArrayOrdered = [
    [
    ...
    'attribute' => 'car'
    ....
    ],
    [
    ...
    'attribute' => 'value'
    ....
    ],
    [
    ...
    'attribute' => 'year'
    ....
    ],
];

我正在进行这个“重新排序”过程,迭代数组并按所需顺序创建一个新数组。有没有更好的方法呢?一些功能或其他

1 个答案:

答案 0 :(得分:0)

按顺序使用订单数组不是最佳选择,因为它需要对您使用的任何方法进行多次数组搜索。

如果您将其翻转以使其值成为键,则可以在usort比较函数中使用属性作为键来查找订单。

$order = ['car', 'value', 'year'];

$order = array_flip($order);  // ['car' => 0, 'value' => 1, 'year' => 2]

usort($originalArray, function($a, $b) use ($order) {
    return $order[$a['attribute']] <=> $order[$b['attribute']];
});

使用usort,这不会创建新数组;它将对原始数组进行排序。