php - array_multisort 排序原理 别被代码字面上误导了!

"泰山", "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"
  }
}

php - array_multisort 排序原理 别被代码字面上误导了!_第1张图片

分析

从上图可以看出,首先,$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排序。

你可能感兴趣的:(php)