記錄array multisort的理解過程

2021-06-19 15:49:50 字數 3078 閱讀 6569

昨天,因為專案的乙個二維陣列排序給糾結了,今天得好好把array_multisort這個陣列函式給講解下,或是給自己記錄下,以免下次又忘記了,好記性不如爛筆頭嘛。

bool array_multisort  ( array &$arr  [, mixed  $arg  = sort_asc  [, mixed  $arg  = sort_regular  [, mixed  $...  ]]] )

從上面手冊上給出來的定義可以看出,該函式在返回的是布林值,成功返回true,失敗返回false,因此在使用時無需再賦值給陣列變數,同時陣列預設的是公升序排序。

例一

// 預設為第乙個陣列按公升序排列,成功返回true,失敗返回false

// 第乙個陣列排序後,對應的第二個陣列對應索引的值也會排序

$arr1 = array(10, 100, 100, 0);

$arr2 = array(1, 3, 2, 4);

array_multisort($arr1, $arr2);

print_r($arr1);

print_r($arr2);

列印結果為

---------- debug php ----------

array

( [0] => 0

[1] => 10

[2] => 100

[3] => 100

)array

( [0] => 4

[1] => 1

[2] => 2

[3] => 3

)輸出完成 (耗時 0 秒) - 正常終止

例二

$ar = array(

array( 1, 2, "2", 3, 1),

array("10", 11, 100, 100, "a")

);// 陣列單元一按字串降序排列

// 陣列單元二(在陣列單元一排序好的基礎上再)按數字公升序排列

array_multisort($ar[0], sort_desc, sort_string,

$ar[1], sort_numeric,sort_desc);

print_r($ar);

列印

---------- debug php ----------

array

( [0] => array

([0] => 3

[1] => 2

[2] => 2

[3] => 1

[4] => 1

)[1] => array

([0] => 100

[1] => 100

[2] => 11

[3] => 10

[4] => a

))輸出完成 (耗時 0 秒) - 正常終止

例三(該例適合從陣列中獲取資料後排序)

$data = array('volume' => 67, 'edition' => 2);

$data = array('volume' => 86, 'edition' => 1);

$data = array('volume' => 85, 'edition' => 6);

$data = array('volume' => 98, 'edition' => 2);

$data = array('volume' => 86, 'edition' => 6);

$data = array('volume' => 67, 'edition' => 7);

foreach ($data as $key => $value)

// $volume公升序排列,$edition降序排列,同時$data陣列以前兩個陣列的鍵排序

array_multisort($volume, sort_asc, $edition, sort_desc, $data);

print_r($volume);

print_r($edition);

print_r($data);

列印

---------- debug php ----------

array

( [0] => 67

[1] => 67

[2] => 85

[3] => 86

[4] => 86

[5] => 98

)array

(    [0] => 7

[1] => 2

[2] => 6

[3] => 6

[4] => 1

[5] => 2

)array

( [0] => array

([volume] => 67

[edition] => 2

)[1] => array

([volume] => 67

[edition] => 7

)[2] => array

([volume] => 85

[edition] => 6

)[3] => array

([volume] => 86

[edition] => 1

)[4] => array

([volume] => 86

[edition] => 6

)[5] => array

([volume] => 98

[edition] => 2

))輸出完成 (耗時 0 秒) - 正常終止

三個例子看完,關於專案中二維陣列排序輕鬆搞定。這個函式關鍵是看第乙個要排序的陣列,因為之後要排序的陣列都是以第乙個陣列為通用鍵的。

[update 2014/07/22]

今天算是徹底理解了這個多維陣列排序函式,array_multisort函式執行成功後會改變要排序的陣列,對於乙個二維陣列而言,若要針對陣列內的某一單元內欄位排序,首先要迴圈該陣列,把要排序的字段迴圈放入乙個陣列,之後使用該函式進行排序

PHP函式補完 array multisort

有時候我們需要對二維陣列的某個鍵的值進行排序,這裡就是討論這個問題。我們可以使用array multisort 這個函式。array multisort 函式對多個陣列或多維陣列進行排序。引數中的陣列被當成乙個表的列並以行來進行排序 這類似 sql 的 order by 子句的功能。第乙個陣列是要排...

DNS記錄型別介紹 A記錄 MX記錄 NS記錄等

dns a記錄 ns記錄 mx記錄 cname記錄 txt記錄 ttl值 ptr值 建站名詞解釋 dns a記錄 ns記錄 mx記錄 cname記錄 txt記錄 ttl值 ptr值 泛網域名稱 泛解析 網域名稱繫結 網域名稱轉向 1.dns domain name system 網域名稱管理系統 網...

DNS記錄型別介紹 A記錄 MX記錄 NS記錄等

dns a記錄 ns記錄 mx記錄 cname記錄 txt記錄 ttl值 ptr值 建站名詞解釋 dns a記錄 ns記錄 mx記錄 cname記錄 txt記錄 ttl值 ptr值 泛網域名稱 泛解析 網域名稱繫結 網域名稱轉向 1.dns domain name system 網域名稱管理系統 網...