PHP數組之array_multisort函數詳解

來源:互聯網
上載者:User
PHP中array_multisort函數對多個數組或多維陣列進行排序,參數數組被當成一個表的列並以行來排序——這類似於 SQL 的 ORDER BY 子句的功能。第一個數組是要排序的主要數組。數組中的行(值)比較為相同的話就按照下一個輸入數組中相應值的大小來排序,依此類推。注意:作為參數的數組元素個數應保持一致,否則會報錯。

先看一個對多個數組進行排序的例子。

  1. $array1 = array('one'=>'10','two'=>'20','three'=>'20','four'=>10);  $array2 = array('one'=>'10','two'=>'30','three'=>'20','four'=>'1');  $array3 = array('one'=>'C','two'=>'A','three'=>'B','four'=>'F');    array_multisort($array1,$array2,$array3);  print_r($array1);//Array ( [four] => 10 [one] => 10 [three] => 20 [two] => 20 )  print_r($array2);//Array ( [four] => 1 [one] => 10 [three] => 20 [two] => 30 )  print_r($array3);//Array ( [four] => F [one] => C [three] => B [two] => A )


在上面的例子中,首先對第一個參數數組進行排序(預設所有數組升序排序),我們可以看出第一個數組中存在相同的值(鍵名‘one’和‘four’的索引值相同,鍵名‘two’和‘three’的索引值相同),所以在排序第一個數組的相同值時就按照下一個輸入數組中相應值的大小來排序(第二個數組‘four’的值小於‘one’的值,因此four的值排在one的前面),依此類推。

在看一個,改變排序次序的例子。

  1. $array1 = array('one'=>'10','two'=>'20','three'=>'20','four'=>10);  $array2 = array('one'=>'10','two'=>'30','three'=>'20','four'=>'1');  $array3 = array('one'=>'C','two'=>'A','three'=>'B','four'=>'F');    array_multisort($array1,SORT_DESC,$array2,SORT_ASC,$array3);  print_r($array1);//Array ( [three] => 20 [two] => 20 [four] => 10 [one] => 10 )  print_r($array2);//Array ( [three] => 20 [two] => 30 [four] => 1 [one] => 10 )  print_r($array3);//Array ( [three] => B [two] => A [four] => F [one] => C )

在這個例子中,第一個數組降序排序,碰到相同的值,按照第二個數組升序值進行排序。

注意:如果要是排序數組都是關聯陣列,則保留原有key名,若存在索引數組,則會按順序重建立立索引。

  1. $array1 = array('one'=>'10',2=>'20',3=>'20',4=>10);    $array2 = array('one'=>'10','2'=>'30','3'=>'20','four'=>'1');    $array3 = array('one'=>'C','2'=>'A','3'=>'B','four'=>'F');        array_multisort($array1,$array2,$array3);      print_r($array1); //Array ( [0] => 10 [one] => 10 [1] => 20 [2] => 20 )   print_r($array2); //Array ( [four] => 1 [one] => 10 [0] => 20 [1] => 30 )   print_r($array3); //Array ( [four] => F [one] => C [0] => B [1] => A )

多維陣列排序。

我們通常有一些多維陣列需要排序:

  1. $guys = array(      array('name'=>'jake', 'score'=>80, 'grade' =>'A'),      array('name'=>'jina', 'score'=>70, 'grade'=>'A'),      array('name'=>'john', 'score'=>70, 'grade' =>'A'),      array('name'=>'ben', 'score'=>20, 'grade'=>'B')  );  //例如我們想按成績倒序排列,如果成績相同就按名字的升序排列。  //這時我們就需要根據$guys的順序多弄兩個數組出來:  $scores = array(80,70,70,20);  $names = array('jake','jina','john','ben');  //然後  array_multisort($scores, SORT_DESC, $names, $guys);    foreach($guys as $v){      print_r($v);      echo "<br/>";  }  /* Array ( [name] => jake [score] => 80 [grade] => A ) Array ( [name] => jina [score] => 70 [grade] => A ) Array ( [name] => john [score] => 70 [grade] => A ) Array ( [name] => ben [score] => 20 [grade] => B ) */

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.