php數組怎麼根據其中的一個值進行排序?解決方法

  • 2019 年 10 月 24 日
  • 筆記

有一個數組如下

 

 我想對其進行一個排序,按照其“sort”的值的大小進行排序,3->4->7。

解決方法如下:

1、首先介紹php的兩個方法

方法一:array_column() 返回輸入數組中某個單一列的值。php版本 5.5+。

參數 描述
array 必需。規定要使用的多維數組(記錄集)。
column_key

必需。需要返回值的列。

可以是索引數組的列的整數索引,或者是關聯數組的列的字元串鍵值。

該參數也可以是 NULL,此時將返回整個數組(配合 index_key 參數來重置數組鍵的時候,非常有用)。

index_key 可選。用作返回數組的索引/鍵的列。

例子一:

 1         $cmf_settings = array(   2             array (   3                 "url" => "img/20191015/5da586020fa6b.jpg",   4                 "alt" => "lunbo2",   5                 "href" => "https://www.baidu.com/",   6                 "sort" => "7"   7             ),   8             array(   9                 "url" => "img/20191018/5da9783499dec.jpg",  10                 "alt" => "X1300",  11                 "href" => "https://www.baidu.com/fully-automatic-pallet-wrappin/x1300-180.html",  12                 "sort" => "3"  13             ),  14             array(  15                 "url" => "img/20191018/5da987c81f420.jpg",  16                 "alt" => "S300",  17                 "href" => "https://www.baidu.com/fully-automatic-pallet-wrappin/s300-170.html",  18                 "sort" => "4"  19             )  20         );  21  22         $cmf_arr = array_column($cmf_settings, 'sort');

列印$cmf_arr得到如下結果

 

 方法二:array_multisort() 函數返回一個排序數組。您可以輸入一個或多個數組。函數先對第一個數組進行排序,接著是其他數組,如果兩個或多個值相同,它將對下一個數組進行排序。

array_multisort(‘數組1’, ‘SORT_ASC(升序)’, ‘數組2’, ‘數組3’, ‘數組4’, ‘數組5’, ‘數組6’);

數組1:進行排序的數組。

SORT_ASC(升序):是對數組1的排序方式。

‘數組2’, ‘數組3’……:根據數組1的排序方式對’數組2’, ‘數組3’, ‘數組4’, ‘數組5’, ‘數組6’進行排序。

數組1升序排序: 第二組數據[1] => “3” 位置變成[0] => “3”,那麼’數組2′, ‘數組3’, ‘數組4’, ‘數組5’, ‘數組6’的第二組數據[1] => “不管是什麼數據” 位置變成[0] => “不管是什麼數據”。

參數 描述
array1 必需。規定數組。
sorting order 可選。規定排列順序。可能的值:

  • SORT_ASC – 默認。按升序排列 (A-Z)。
  • SORT_DESC – 按降序排列 (Z-A)。
sorting type 可選。規定排序類型。可能的值:

  • SORT_REGULAR – 默認。把每一項按常規順序排列(Standard ASCII,不改變類型)。
  • SORT_NUMERIC – 把每一項作為數字來處理。
  • SORT_STRING – 把每一項作為字元串來處理。
  • SORT_LOCALE_STRING – 把每一項作為字元串來處理,基於當前區域設置(可通過 setlocale() 進行更改)。
  • SORT_NATURAL – 把每一項作為字元串來處理,使用類似 natsort() 的自然排序。
  • SORT_FLAG_CASE – 可以結合(按位或)SORT_STRING 或 SORT_NATURAL 對字元串進行排序,不區分大小寫。
array2 可選。規定數組。
array3 可選。規定數組。

 

 例子二:

 1         $cmf_settings = array(   2             array (   3                 "url" => "img/20191015/5da586020fa6b.jpg",   4                 "alt" => "lunbo2",   5                 "href" => "https://www.baidu.com/",   6                 "sort" => "7"   7             ),   8             array(   9                 "url" => "img/20191018/5da9783499dec.jpg",  10                 "alt" => "X1300",  11                 "href" => "https://www.baidu.com/fully-automatic-pallet-wrappin/x1300-180.html",  12                 "sort" => "3"  13             ),  14             array(  15                 "url" => "img/20191018/5da987c81f420.jpg",  16                 "alt" => "S300",  17                 "href" => "https://www.baidu.com/fully-automatic-pallet-wrappin/s300-170.html",  18                 "sort" => "4"  19             )  20         );  22         $cmf_arr = array_column($cmf_settings, 'sort');  24         array_multisort($cmf_arr, SORT_ASC, $cmf_settings);  

列印$cmf_settings得到如下結果,滿足需求。

總結:利用 array_column() 把要排序的鍵值提取出來,在利用array_multisort()對數組進行排序。理解起來有點繞,不過以後的用處會很大的。

如有錯誤請指出,謝謝。