php二維數組根據多個字段排序,php兩個有序數組合併成一個有序數組

本文目錄一覽:

PHP數組排序array_multisort函數詳細用法跟排序方法是怎樣的?

一、先看最簡單的情況。有兩個數組:

$arr1 = array(1,9,5);

$arr2 = array(6,2,4);

array_multisort($arr1,$arr2);

print_r($arr1); // 得到的順序是1,5,9

print_r($arr2); // 得到的順序是6,4,2

我估計兩個數組的值自始至終都是對應着的:1對應6,9對應2,5對應4。

我們再加多一個數組看看會怎樣:

$arr1 = array(1,9,5);

$arr2 = array(6,2,4);

$arr3 = array(3,7,8);

array_multisort($arr1,$arr2,$arr3);

查看結果,1自始至終都對應6對應3,其它項也是如此。這種對應關係就是手冊中所謂的“排序時保留原有的鍵名關聯”。

另外也可以把每個數組想像成數據庫表的一列。而對應着的1,6,3為一數據行,9,2,7為另一數據行。。。

array_multisort會先按第一個數組(想像成列)排序,如果第一個數組(列)的值相同,則按第二個數組(列)排序。

具體可以用下面的程式來測試:

$arr1 = array(1,9,5,9);

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

$arr3 = array(3,7,8,0);

array_multisort($arr1,$arr2,$arr3);

可以想像這裡$arr3的結果是(3,8,0,7)。

二、接下來講解array_multisort的參數。這個函數的參數很靈活。最簡單的情況是如上面所示的以1個或n個數組作為參數,需要注意的是每個數組的項數要一樣,否則會warning導致排序失效。

像這樣array_multisort($arr1,$arr2,$arr3); 默認是所有數組都是升序排列,如果想對$arr2降序,併當作字符串去比較,就要寫成:

array_multisort($arr1, $arr2, SORT_DESC, SORT_STRING, $arr3);

每個array後面可以跟一個排序順序標誌或一個排序類型標誌,或者兩種標誌同時出現。但是每種排序標誌在每個數組後面只能出現一個。

詳細如下:

排序順序標誌:

SORT_ASC – 按照上升順序排序(默認)

SORT_DESC – 按照下降順序排序

排序類型標誌:

SORT_REGULAR – 將項目按照通常方法比較(默認)

SORT_NUMERIC – 將項目按照數值比較

SORT_STRING – 將項目按照字符串比較

三、最後是array_multisort有什麼實際作用。

我們通常有一些多維數組需要排序:

$guys = Array

(

[0] = Array

(

[name] = jake

[score] = 80

[grade] = A

)

[1] = Array

(

[name] = jin

[score] = 70

[grade] = A

)

[2] = Array

(

[name] = john

[score] = 80

[grade] = A

)

[3] = Array

(

[name] = ben

[score] = 20

[grade] = B

)

)

例如我們想按成績倒序排列,如果成績相同就按名字的升序排列。

這時我們就需要根據$guys的順序多弄兩個數組出來:

$scores = array(80,70,80,20);

$names = array(‘jake’,’jin’,’john’,’ben’);

然後

array_multisort($scores, SORT_DESC, $names, $guys);就行了

還能不能更靈活一點呢,每次想排序都要另外弄些數組出來嗎?

其實在qeephp的helper_array類裡面已經封裝得很好,下面是它的兩個方法,需要的人自己修改一下就可以用了:

/**

* 根據指定的鍵對數組排序

*

* 用法:

* @code php

* $rows = array(

* array(‘id’ = 1, ‘value’ = ‘1-1’, ‘parent’ = 1),

* array(‘id’ = 2, ‘value’ = ‘2-1’, ‘parent’ = 1),

* array(‘id’ = 3, ‘value’ = ‘3-1’, ‘parent’ = 1),

* array(‘id’ = 4, ‘value’ = ‘4-1’, ‘parent’ = 2),

* array(‘id’ = 5, ‘value’ = ‘5-1’, ‘parent’ = 2),

* array(‘id’ = 6, ‘value’ = ‘6-1’, ‘parent’ = 3),

* );

*

* $rows = Helper_Array::sortByCol($rows, ‘id’, SORT_DESC);

* dump($rows);

* // 輸出結果為:

* // array(

* // array(‘id’ = 6, ‘value’ = ‘6-1’, ‘parent’ = 3),

* // array(‘id’ = 5, ‘value’ = ‘5-1’, ‘parent’ = 2),

* // array(‘id’ = 4, ‘value’ = ‘4-1’, ‘parent’ = 2),

* // array(‘id’ = 3, ‘value’ = ‘3-1’, ‘parent’ = 1),

* // array(‘id’ = 2, ‘value’ = ‘2-1’, ‘parent’ = 1),

* // array(‘id’ = 1, ‘value’ = ‘1-1’, ‘parent’ = 1),

* // )

* @endcode

*

* @param array $array 要排序的數組

* @param string $keyname 排序的鍵

* @param int $dir 排序方向

*

* @return array 排序後的數組

*/

static function sortByCol($array, $keyname, $dir = SORT_ASC)

{

return self::sortByMultiCols($array, array($keyname = $dir));

}

/**

* 將一個二維數組按照多個列進行排序,類似 SQL 語句中的 ORDER BY

*

* 用法:

* @code php

* $rows = Helper_Array::sortByMultiCols($rows, array(

* ‘parent’ = SORT_ASC,

* ‘name’ = SORT_DESC,

* ));

* @endcode

*

* @param array $rowset 要排序的數組

* @param array $args 排序的鍵

*

* @return array 排序後的數組

*/

static function sortByMultiCols($rowset, $args)

{

$sortArray = array();

$sortRule = ”;

foreach ($args as $sortField = $sortDir)

{

foreach ($rowset as $offset = $row)

{

$sortArray[$sortField][$offset] = $row[$sortField];

}

$sortRule .= ‘$sortArray[\” . $sortField . ‘\’], ‘ . $sortDir . ‘, ‘;

}

if (empty($sortArray) || empty($sortRule)) { return $rowset; }

eval(‘array_multisort(‘ . $sortRule . ‘$rowset);’);

return $rowset;

}

php中二維數組怎麼按指定的字段排序

請確定說二維數組式,?:        array(‘name一’=’value一’,’name二’=’value二’); 或者?: array(     array(‘name一’=’value一’,’name二’=’value二’),     array(‘name一’=’value三’,’name二’=’value四’)     )

php 根據某個字段對二維數組這個數組排序

試編寫代碼如下:

?php

$array[] = array(‘id’=1,’price’=50);

$array[] = array(‘id’=2,’price’=70);

$array[] = array(‘id’=3,’price’=30);

$array[] = array(‘id’=4,’price’=20);

foreach ($array as $key=$value){

$id[$key] = $value[‘id’];

$price[$key] = $value[‘price’];

}

array_multisort($price,SORT_NUMERIC,SORT_DESC,$id,SORT_STRING,SORT_ASC,$array);

echo ‘pre’;

print_r($array);

echo ‘/pre’;

?

運行結果:

Array

(

[0] = Array

(

[id] = 2

[price] = 70

)

[1] = Array

(

[id] = 1

[price] = 50

)

[2] = Array

(

[id] = 3

[price] = 30

)

[3] = Array

(

[id] = 4

[price] = 20

)

)

PHP中怎麼根據二維數組中的子數組的某個元素進行排序

//先用array_column 多維數組按照縱向(列)取出

$date = array_column($arr, ‘0’);

//上面得到的結果:array()

//再用array_multisort 結合array_column得到的結果對$arr進行排序

array_multisort($date,SORT_ASC,$arr);

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/227363.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-09 16:28
下一篇 2024-12-09 16:29

相關推薦

  • 為什麼Python不能編譯?——從多個方面淺析原因和解決方法

    Python作為很多開發人員、數據科學家和計算機學習者的首選編程語言之一,受到了廣泛關注和應用。但與之伴隨的問題之一是Python不能編譯,這給基於編譯的開發和部署方式帶來不少麻煩…

    編程 2025-04-29
  • Python導入數組

    本文將為您詳細闡述Python導入數組的方法、優勢、適用場景等方面,並附上代碼示例。 一、numpy庫的使用 numpy是Python中一個強大的數學庫,其中提供了非常豐富的數學函…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • Python返回數組:一次性搞定多種數據類型

    Python是一種多用途的高級編程語言,具有高效性和易讀性的特點,因此被廣泛應用於數據科學、機器學習、Web開發、遊戲開發等各個領域。其中,Python返回數組也是一項非常強大的功…

    編程 2025-04-29
  • Python合併多個相同表頭文件

    對於需要合併多個相同表頭文件的情況,我們可以使用Python來實現快速的合併。 一、讀取CSV文件 使用Python中的csv庫讀取CSV文件。 import csv with o…

    編程 2025-04-29
  • Python去掉數組的中括號

    在Python中,被中括號包裹的數據結構是列表,列表是Python中非常常見的數據類型之一。但是,有些時候我們需要將列表展開成一維的數組,並且去掉中括號。本文將為大家詳細介紹如何用…

    編程 2025-04-29
  • Python操作數組

    本文將從多個方面詳細介紹如何使用Python操作5個數組成的列表。 一、數組的定義 數組是一種用於存儲相同類型數據的數據結構。Python中的數組是通過列表來實現的,列表中可以存放…

    編程 2025-04-29
  • Python根據表格數據生成折線圖

    本文將介紹如何使用Python根據表格數據生成折線圖。折線圖是一種常見的數據可視化圖表形式,可以用來展示數據的趨勢和變化。Python是一種流行的編程語言,其強大的數據分析和可視化…

    編程 2025-04-29
  • 從多個方面用法介紹yes,but let me review and configure level of access

    yes,but let me review and configure level of access是指在授權過程中,需要進行確認和配置級別控制的全能編程開發工程師。 一、授權確…

    編程 2025-04-29
  • Python二維數組對齊輸出

    本文將從多個方面詳細闡述Python二維數組對齊輸出的方法與技巧。 一、格式化輸出 Python中提供了格式化輸出的方法,可以對輸出的字符串進行格式化處理。 names = [‘A…

    編程 2025-04-29

發表回復

登錄後才能評論