亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

根據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 關注
  • 134 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號