根据php中另一个多维数组中给定的顺序,按值对多维数组排序

根据php中另一个多维数组中给定的顺序,按值对多维数组排序,php,arrays,Php,Arrays,我这里有两个多维数组:-一个是有顺序的数组 $order = [1=>'apple', 2=>'banana', 3=>'mango']; 另一个数组,其中包含要排序的数据: $data = [ ['title'=>'fruit', 'name'=>'banana'], ['title'=>'fruit', 'name'=>'apple'], ['title'=>'fruit', 'name'=>'mango'], ['title'=>

我这里有两个多维数组:-一个是有顺序的数组

$order = [1=>'apple', 2=>'banana', 3=>'mango'];
另一个数组,其中包含要排序的数据:

$data = [
['title'=>'fruit', 'name'=>'banana'],
['title'=>'fruit', 'name'=>'apple'],
['title'=>'fruit', 'name'=>'mango'],
['title'=>'fruit', 'name'=>'pineapple'],
];
有些值的顺序在
$order
数组中未提及,因此它们可以位于以下结果中给出的其余数组值的下面:

排序后,我应得到如下结果:

[
    ['title'=>'fruit', 'name'=>'apple'],
    ['title'=>'fruit', 'name'=>'banana'],
    ['title'=>'fruit', 'name'=>'mango'],
    ['title'=>'fruit', 'name'=>'pineapple']
];
我已经在SO中找到了很多答案,但我甚至不能从这样一个场景开始; 1. 2.

首先,翻转阵列:

$order = array_flip($order);
然后只需使用usort进行修复:

usort($data, static function(array $x, array $y) use ($order) {
    return $order[$x['name']] - $order[$y['name']];
})
首先,翻转阵列:

$order = array_flip($order);
然后只需使用usort进行修复:

usort($data, static function(array $x, array $y) use ($order) {
    return $order[$x['name']] - $order[$y['name']];
})

usort($data它应该是,我得到一个未定义索引Pineaplete的错误,这是因为您的订单数组中没有pinneaple。只需添加它:)如果您没有索引,您也可以使用故障保护,通过使用空合并运算符访问$x和$y:$x['name']??count($order)这从本质上说是这样的:订单中未定义的索引将自动放在最后。如果名称为空,您需要知道在应用程序中传入的数据将以何种形式出现。如果名称为空,或者索引未定义,则需要对此进行说明。如果您想将空名称放在前面,可以将您的订单数组设置为[0=>null,1=>apple',…]等usort($data它应该是,我得到一个错误,未定义索引菠萝,这是因为您的订单数组中没有pinneaple。只需添加它:)在没有索引的情况下,您还可以使用故障保护,方法是使用空合并运算符访问$x和$y:$x['name']??count($order)这从本质上说是这样的:订单中未定义的索引将自动放在最后。如果名称为空,您需要知道在应用程序中传入的数据将以何种形式出现。如果名称为空,或者索引未定义,则需要对此进行说明。如果您想将空名称放在前面,可以将订单数组设置为[0=>null,1=>apple',…]等。