繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM