我有一个像
这样的数组$originalArray = [
...
[
...
'attribute' => 'value'
....
],
[
...
'attribute' => 'year'
....
],
[
...
'attribute' => 'car'
....
],
....
];
我有另一个数组,它定义了前一个数组的所需顺序。
$desiredOrderArray = ['car', 'value', 'year'];
我想要的输出是
$newArrayOrdered = [
[
...
'attribute' => 'car'
....
],
[
...
'attribute' => 'value'
....
],
[
...
'attribute' => 'year'
....
],
];
我正在进行这个“重新排序”过程,迭代数组并按所需顺序创建一个新数组。有没有更好的方法呢?一些功能或其他
答案 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
,这不会创建新数组;它将对原始数组进行排序。