为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
炎炎设计 2022-12-03 10:24:28
我这里有两个多维数组:- 一个有顺序$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 多维数组进行排序?
查看完整描述

2 回答

?
www说

TA贡献1775条经验 获得超8个赞

$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){

  $ka = array_search($a['name'],$order);

  $kb = array_search($b['name'],$order);

  if($ka === false) $ka=9999;

  if($kb === false) $kb=9999;

  return $ka <=> $kb;

});

结果:


array (

  0 => 

  array (

    'title' => "fruit",

    'name' => "apple",

  ),

  1 => 

  array (

    'title' => "fruit",

    'name' => "banana",

  ),

  2 => 

  array (

    'title' => "fruit",

    'name' => "mango",

  ),

  3 => 

  array (

    'title' => "fruit",

    'name' => "pineapple",

  ),

)


查看完整回答
反对 回复 2022-12-03
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

首先,翻转数组:


$order = array_flip($order);

然后简单地使用 usort 来修复它:


usort($data, static function(array $x, array $y) use ($order) {

    return $order[$x['name']] - $order[$y['name']];

})


查看完整回答
反对 回复 2022-12-03
  • 2 回答
  • 0 关注
  • 101 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信