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

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


$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.如何在 PHP 中对多维数组进行排序 2.根据内部数组中的值对 PHP 多维数组进行排序?


炎炎设计
浏览 110回答 2
2回答

www说

$order = [1=>'apple', 2=>'banana', 3=>'mango'];$data = [['title'=>'fruit', 'name'=>'banana'],['title'=>'fruit', 'name'=>'apple'],['title'=>'fruit', 'name'=>'mango'],['title'=>'fruit', 'name'=>'pineapple'],];usort($data,function($a,$b) use($order){&nbsp; $ka = array_search($a['name'],$order);&nbsp; $kb = array_search($b['name'],$order);&nbsp; if($ka === false) $ka=9999;&nbsp; if($kb === false) $kb=9999;&nbsp; return $ka <=> $kb;});结果:array (&nbsp; 0 =>&nbsp;&nbsp; array (&nbsp; &nbsp; 'title' => "fruit",&nbsp; &nbsp; 'name' => "apple",&nbsp; ),&nbsp; 1 =>&nbsp;&nbsp; array (&nbsp; &nbsp; 'title' => "fruit",&nbsp; &nbsp; 'name' => "banana",&nbsp; ),&nbsp; 2 =>&nbsp;&nbsp; array (&nbsp; &nbsp; 'title' => "fruit",&nbsp; &nbsp; 'name' => "mango",&nbsp; ),&nbsp; 3 =>&nbsp;&nbsp; array (&nbsp; &nbsp; 'title' => "fruit",&nbsp; &nbsp; 'name' => "pineapple",&nbsp; ),)

潇潇雨雨

首先,翻转数组:$order = array_flip($order);然后简单地使用 usort 来修复它:usort($data, static function(array $x, array $y) use ($order) {&nbsp; &nbsp; return $order[$x['name']] - $order[$y['name']];})
打开App,查看更多内容
随时随地看视频慕课网APP