PHP陣列array multisort排序詳解

2021-09-07 15:01:31 字數 4610 閱讀 1575

今天特意再看了下官網的介紹,對它的多個陣列的排序還是每台理解,找了些資料深入理解了下,在此總結下。

php中array_multisort函式對多個陣列或多維陣列進行排序,關聯(string)鍵名保持不變,但數字鍵名會被重新索引。 

輸入陣列被當成乙個表的列並以行來排序——這類似於 sql 的 order by 子句的功能。第乙個陣列是要排序的主要陣列。陣列中的行(值)比較為相同的話就按照下乙個輸入陣列中相應值的大小來排序,依此類推。——這句話是理解此函式用法的關鍵。

第乙個引數必須是乙個陣列。接下來的每個引數可以是陣列或者是下面列出的排序標誌。

排序順序標誌: 

■sort_asc - 按照上公升順序排序 

■sort_desc - 按照下降順序排序

排序型別標誌: 

■sort_regular - 將專案按照通常方法比較 

■sort_numeric - 將專案按照數值比較 

■sort_string - 將專案按照字串比較

每個陣列之後不能指定兩個同類的排序標誌。每個陣列後指定的排序標誌僅對該陣列有效 - 在此之前為預設值 sort_asc 和 sort_regular。

引數陣列被當成乙個表的列並以行來排序——這類似於 sql 的 order by 子句的功能。第乙個陣列是要排序的主要陣列。陣列中的行(值)比較為相同的話就按照下乙個輸入陣列中相應值的大小來排序,依此類推。注意:作為引數的陣列元素個數應保持一致,否則會報錯。

先看乙個對多個陣列進行排序的例子。

<?php

$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的前面),依此類推。

在看乙個,改變排序順序的例子。

$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名,若存在索引陣列,則會按順序重新建立索引。

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

多維陣列排序。

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

$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)/*

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 )

*/

再來個一次對多個陣列進行排序:

$num1 = array(3, 5, 4, 3);

$num2 = array(27, 50, 44, 78);

array_multisort($num1, sort_asc, $num2,sort_desc);

print_r($num1

);print_r($num2

);//

result: array ( [0] => 3 [1] => 3 [2] => 4 [3] => 5 ) array ( [0] => 78 [1] => 27 [2] => 44 [3] => 50 )

對多維陣列(以二位陣列為例)進行排序:

$arr = array

( '0' => array

( 'num1' => 3,

'num2' => 27),

'1' => array

( 'num1' => 5,

'num2' => 50),

'2' => array

( 'num1' => 4,

'num2' => 44),

'3' => array

( 'num1' => 3,

'num2' => 78)

);foreach ( $arr

as$key => $row

)array_multisort($num1, sort_asc, $num2, sort_desc, $arr

);print_r($arr

);//

result:array([0]=>array([num1]=>3 [num2]=>78) [1]=>array([num1]=>3 [num2]=>27) [2]=>array([num1]=>4 [num2]=>44) [3]=>array([num1]=>5 [num2]=>50))

理解有限.......可能有描述不正之處

php 陣列 PHP 陣列

多維陣列 在多維陣列中,主陣列中的每個元素也是乙個陣列。在子陣列中的每個元素也可以是陣列,以此類推。例子 1 在本例中,我們建立了乙個帶有自動分配的 id 鍵的多維陣列 families array griffin array peter lois megan quagmire array glen...

php 陣列 PHP丨陣列

本期要點 什麼是陣列 鍵值對的概念 陣列的常用操作 增 刪 改 查 什麼是多維陣列 什麼是陣列 陣列就是一組資料的集合。如果說變數是乙個杯子的話,那麼,陣列就是一箱杯子。索引陣列與關聯陣列 arr1 1,2,3 arr2 0 1,1 2,2 3,var dump arr1,arr2 把上面的 在瀏覽...

php陣列分開 PHP 合併陣列

這裡我們主要介紹的是array merge 函式,也是我們在使用php合併陣列的時候經常使用到的函式,其他的附加合併函式,我在這裡也大概描述一下就行了,如果需要更加詳細或者更多的函式,可以檢視php幫助文件,也可以根據需求寫適合自己的php自定義函式 array merge 函式將陣列合併到一起,返...