[英]Order multiarray based on another array
我有一个数组像
$originalArray = [
...
[
...
'attribute' => 'value'
....
],
[
...
'attribute' => 'year'
....
],
[
...
'attribute' => 'car'
....
],
....
];
我还有另一个数组,它定义了先前数组的所需顺序。
$desiredOrderArray = ['car', 'value', 'year'];
我想要的输出是
$newArrayOrdered = [
[
...
'attribute' => 'car'
....
],
[
...
'attribute' => 'value'
....
],
[
...
'attribute' => 'year'
....
],
];
我正在遍历数组并以所需顺序创建新数组的“重新排序”过程。 有更好的方法吗? 一些功能或其他
按原样使用order数组并不是最佳选择,因为它需要对使用的任何方法进行多个数组搜索。
如果将其翻转以使其值成为键,则在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
,将不会创建新的数组; 它将对原始数组进行排序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.