php - array_multisort 排序原理 別被代碼字面上誤導了!

<?php
$arrayData = array(
    array("name"=>"泰山", "age"=>"23"),
    array("name"=>"黃山", "age"=>"43"),
    array("name"=>"嵩山", "age"=>"18"),
    array("name"=>"廬山", "age"=>"21"),
    array("name"=>"42", "age"=>"18"),
);

$array = ["23", "43", "18", "21", "42"];
array_multisort($array, SORT_DESC , $arrayData);
var_dump($arrayData);
exit;

?>
//輸出, 從下面能看到 array("name"=>"42", "age"=>"18") 排第二個,why?

array(5) {
  [0]=>
  array(2) {
    ["name"]=>
    string(6) "黃山"
    ["age"]=>
    string(2) "43"
  }
  [1]=>
  array(2) {
    ["name"]=>
    string(2) "42"
    ["age"]=>
    string(2) "18"
  }
  [2]=>
  array(2) {
    ["name"]=>
    string(6) "泰山"
    ["age"]=>
    string(2) "23"
  }
  [3]=>
  array(2) {
    ["name"]=>
    string(6) "廬山"
    ["age"]=>
    string(2) "21"
  }
  [4]=>
  array(2) {
    ["name"]=>
    string(6) "嵩山"
    ["age"]=>
    string(2) "18"
  }
}

分析

從上圖可以看出,首先,$array 與$arrayData的值對應的鍵是一一相應的,不會發生改變。

然而 SORT_DESC 進行對 $array 倒序排序:[43, 42, 23, 21, 18]

接着$arrayData 指向42的那個數組 aray('name'=>42, 'age'=>18) 排序的位置 跟 $arr的42位置一樣,排在第二位

網上很多寫法  

array_multisort(array_column($subList,'sort'),SORT_DESC , $subList);

很多時候,我們誤導了 以爲 按照sort排序,其實真正原理並不是按照sort排序,是按照sort的對應的值位排序。

但最終效果 卻達到按照sort排序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章