php對多為數組某個值進行排序,php數組鍵值排序

本文目錄一覽:

如何使用強大的PHP函數對數組進行排序

如果你已經使用了一段時間PHP的話,那麼,你應該已經對它的數組比較熟悉了——這種數據結構允許你在單個變量中存儲多個值,並且可以把它們作為一個集合進行操作。

經常,開發人員發現在PHP中使用這種數據結構對值或者數組元素進行排序非常有用。PHP提供了一些適合多種數組的排序函數,這些函數允許你在數組內部對元素進行排列,也允許用很多不同的方法對它們進行重新排序。在這篇文章中我們將討論該排序中最重要的幾個函數。

簡單排序

首先,讓我們來看看最簡單的情況:將一個數組元素從低到高進行簡單排序,這個函數既可以按數字大小排列也可以按字母順序排列。PHP的sort()函數實現了這個功能,如Listing A所示:

Listing A

?php

 $data = array(5,8,1,7,2);

 sort($data);

 print_r($data);

 ?

輸出結果如下所示:

Array ([0] = 1

[1] = 2

[2] = 5

[3] = 7

[4] = 8

)

也能使用rsort()函數進行排序,它的結果與前面所使用的sort()簡單排序結果相反。Rsort()函數對數組元素進行從高到低的倒排,同樣可以按數字大小排列也可以按字母順序排列。Listing B給我們展示了它的一個例子:

Listing B

?php $data = array(5,8,1,7,2);rsort($data); print_r($data);

?

它的輸出結果如下:

Array ([0] = 8

[1] = 7

[2] = 5

[3] = 2

[4] = 1

)

根據關鍵字排序

當我們使用數組的時候,經常根據關鍵字對數組重新排序,從高到低。Ksort()函數就是根據關鍵字進行排序的函數,同時,它在排序的過程中會保持關鍵字的相關性。Listing C就是一個例子:

Listing C

?php $data = array(“US” = “United States”, “IN” = “India”, “DE” = “Germany”, “ES” = “Spain”);ksort($data); print_r($data);

?

它的輸出結果如下:

Array ([DE] = Germany

[ES] = Spain

[IN] = India

[US] = United States

)

Krsort()函數是根據關鍵字對數組進行倒排,Listing D就是這樣的例子:

Listing D

?php $data = array(“US” = “United States”, “IN” = “India”, “DE” = “Germany”, “ES” = “Spain”);krsort($data); print_r($data);

?

它的輸出結果如下:

Array ([US] = United States

[IN] = India

[ES] = Spain

[DE] = Germany

)

根據值排序

如果你想使用值排序來取代關鍵字排序的話,PHP也能滿足你的要求。你只要使用asort()函數來代替先前提到的ksort()函數就可以了。如Listing E所示:

Listing E

?php $data = array(“US” = “United States”, “IN” = “India”, “DE” = “Germany”, “ES” = “Spain”);asort($data); print_r($data);

?

下面就是它的輸出結果。請注意這個結果與上面使用ksort()函數所得到的結果的不同——在這兩種情況中,都是按字母順序進行排序的,但是它們是根據數組的不同字段進行排序的。

同時,請注意關鍵字-值之間的聯繫會始終保持;它只是關鍵字-值對排序後的一種方式,排序並不會改變它們的對應關係。

Array ([DE] = Germany

[IN] = India

[ES] = Spain

[US] = United States

)

現在,你肯定能猜到這種排序也可以進行倒排,它使用arsort()函數完成這個功能。Listing F就是一個例子:

Listing F

?php $data = array(“US” = “United States”, “IN” = “India”, “DE” = “Germany”, “ES” = “Spain”);arsort($data); print_r($data);

?

下面是它的輸出結果,根據值按字母表順序進行倒排。將下面的結果與用krsort()函數進行倒排後生成的結果進行比較,就能很容易明白兩者的不同了。

Array ([US] = United States

[ES] = Spain

[IN] = India

[DE] = Germany

)

自然語言排序

PHP有一個非常獨特的排序方式,這種方式使用認知而不是使用計算規則。這種特性稱為自然語言排序,當創建模糊邏輯應用軟件的時候這種排序方式非常有用。下面大家可以來看看它的一個簡單例子,如Listing G所示:

Listing G

?php $data = array(“book-1”, “book-10”, “book-100”, “book-5”); sort($data);print_r($data);

natsort($data); print_r($data);?

它的輸出結果如下:

Array ([0] = book-1

[1] = book-10

[2] = book-100

[3] = book-5

)

Array

(

[0] = book-1

[3] = book-5

[1] = book-10

[2] = book-100

)

它們的不同已經很清楚了:第二個排序結果更直觀,更「人性化」,然而第一個則更符合算法規則,更具「計算機」特點。

自然語言能進行倒排嗎?答案是肯定的!只要對natsort()的結果使用array_reverse()函數就可以了,Listing H就是一個簡單例子:

Listing H

?php $data = array(“book-1”, “book-10”, “book-100”, “book-5”);natsort($data); print_r(array_reverse($data));

?

下面是它的輸出結果:

Array ([0] = book-100

[1] = book-10

[2] = book-5

[3] = book-1

)

根據用戶自定義的規則排序

PHP也能讓你定義自己的排序算法,你可以通過創建你自己的比較函數,並把它傳遞給usort()函數。如果第一個參數比第二個參數「小」的話,比較函數必須返回一個比0小的數,如果第一參數比第二個參數「大」的話,比較函數應該返回一個比0大的數。

Listing I就是這樣的一個例子,在這個例子中根據它們的長度對數組元素進行排序,最短的項放在最前面:

Listing I

?php $data = array(“joe@host.com”, “john.doe@gh.co.uk”, “asmithsonian@us.info”, “jay@zoo.tw”);usort($data, ‘sortByLen’);

print_r($data); function sortByLen($a, $b) {

if (strlen($a) == strlen($b)) {

return 0;

} else {

return (strlen($a) strlen($b)) ? 1 : -1;

}

}

?

這樣,就創建了我們自己的比較函數,這個函數使用strlen()函數比較每一個字符串的個數,然後分別返回1,0或-1.這個返回值是決定元素排列的基礎。下面是它的輸出結果:

Array ([0] = jay@zoo.tw

[1] = joe@host.com

[2] = john.doe@gh.co.uk

[3] = asmithsonian@us.info

)

自然語言排序

PHP有一個非常獨特的排序方式,這種方式使用認知而不是使用計算規則。這種特性稱為自然語言排序,當創建模糊邏輯應用軟件的時候這種排序方式非常有用。下面大家可以來看看它的一個簡單例子,如Listing G所示:

Listing G

?php $data = array(“book-1”, “book-10”, “book-100”, “book-5”); sort($data);print_r($data);

natsort($data); print_r($data);?

它的輸出結果如下:

Array ([0] = book-1

[1] = book-10

[2] = book-100

[3] = book-5

)

Array

(

[0] = book-1

[3] = book-5

[1] = book-10

[2] = book-100

)

它們的不同已經很清楚了:第二個排序結果更直觀,更「人性化」,然而第一個則更符合算法規則,更具「計算機」特點。

自然語言能進行倒排嗎?答案是肯定的!只要對natsort()的結果使用array_reverse()函數就可以了,Listing H就是一個簡單例子:

Listing H

?php $data = array(“book-1”, “book-10”, “book-100”, “book-5”);natsort($data); print_r(array_reverse($data));

?

下面是它的輸出結果:

Array ([0] = book-100

[1] = book-10

[2] = book-5

[3] = book-1

)

根據用戶自定義的規則排序

PHP也能讓你定義自己的排序算法,你可以通過創建你自己的比較函數,並把它傳遞給usort()函數。如果第一個參數比第二個參數「小」的話,比較函數必須返回一個比0小的數,如果第一參數比第二個參數「大」的話,比較函數應該返回一個比0大的數。

Listing I就是這樣的一個例子,在這個例子中根據它們的長度對數組元素進行排序,最短的項放在最前面:

Listing I

?php $data = array(“joe@host.com”, “john.doe@gh.co.uk”, “asmithsonian@us.info”, “jay@zoo.tw”);usort($data, ‘sortByLen’);

print_r($data); function sortByLen($a, $b) {

if (strlen($a) == strlen($b)) {

return 0;

} else {

return (strlen($a) strlen($b)) ? 1 : -1;

}

}

?

這樣,就創建了我們自己的比較函數,這個函數使用strlen()函數比較每一個字符串的個數,然後分別返回1,0或-1.這個返回值是決定元素排列的基礎。下面是它的輸出結果:

Array ([0] = jay@zoo.tw

[1] = joe@host.com

[2] = john.doe@gh.co.uk

[3] = asmithsonian@us.info

)

多維排序

最後,PHP也允許在多維數組上執行一些比較複雜的排序——例如,首先對一個嵌套數組使用一個普通的關鍵字進行排序,然後再根據另一個關鍵字進行排序。這與使用SQL的ORDER BY語句對多個字段進行排序非常相似。為了能更好的明白它是如何工作的,請仔細看Listing J所舉的例子:

Listing J

?php $data = array(array(“id” = 1, “name” = “Boney M”, “rating” = 3),

array(“id” = 2, “name” = “Take That”, “rating” = 1),

array(“id” = 3, “name” = “The Killers”, “rating” = 4),

array(“id” = 4, “name” = “Lusain”, “rating” = 3),

); foreach ($data as $key = $value) {

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

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

}

array_multisort($rating, $name, $data); print_r($data);?

這裡,我們在$data數組中模擬了一個行和列數組。然後,我使用array_multisort()函數對數據集合進行重排,首先是根據rating進行排序,然後,如果rating相等的話,再根據name排序。它的輸出結果如下:

Array ([0] = Array

(

[id] = 2

[name] = Take That

[rating] = 1

) [1] = Array

(

[id] = 1

[name] = Boney M

[rating] = 3

)

[2] = Array

(

[id] = 4

[name] = Lusain

[rating] = 3

)

[3] = Array

(

[id] = 3

[name] = The Killers

[rating] = 4

)

)

array_multisort()函數是PHP中最有用的函數之一,它有非常廣泛的應用範圍。另外,就如你在例子中所看到的,它能對多個不相關的數組進行排序,也可以使用其中的一個元素作為下次排序的基礎,還可以對數據庫結果集進行排序。

這些例子應該讓你對PHP中各種數組排序函數的使用有了初步的了解,也向你展示了一些隱藏在PHP數組處理工具包的內部功能。

最後,祝你能愉快的使用這些功能!

php 多維數組鍵值重新排序

$a = array(2=array(1,2,3,4),6=array(6,2,3,5),1=array(1,4,53));

$b = array_values($a);//返回數組中的所有值,形成新的數組,建立數字索引

php 多維數組排序問題!

這是自定義比較函數的排序,排序中進行元素大小比較時,調用用戶自定義函數裁決,函數返回-1、0、1表示比較的兩個元素的大小關係,能夠猜測到0表示相等,-1是小於,1是大於。

php 怎麼根據數組中其中的一個值排序

sort() – 以升序對數組排序

rsort() – 以降序對數組排序

asort() – 根據值,以升序對關聯數組進行排序

ksort() – 根據鍵,以升序對關聯數組進行排序

arsort() – 根據值,以降序對關聯數組進行排序

krsort() – 根據鍵,以降序對關聯數組進行排序

php 多維數組排序

$arr = array();

for ($i = 0; $i = 5; $i++) {

$arr[$i][‘Total’] = array(“attribute” = array(“AmountBeforTax” = rand()));

}

//以上是你的數組的簡化版本

$key_arr = array();

//聲明索引數組

foreach ($arr as $k = $v) {

$key_arr[$k] = $v[‘Total’][‘attribute’][‘AmountBeforTax’];

//將需要排序的數值加入到數組中

}

//現在$key_arr就是索引數組,是鍵值的關係表

array_multisort($arr, SORT_ASC, $key_arr);

//進行排序

echo “pre”;

print_r($arr);

echo “/pre”;

有不明白的地方可以追問,滿意請採納 謝謝

PHP實現指定字段的多維數組排序函數分享

這篇文章主要介紹了PHP實現指定字段的多維數組排序函數分享,本文分享了一段PHP指定字段的多維數組排序方法的代碼,這段代碼可實現根據field字段對數組進行排序,需要的朋友可以參考下

PHP數組排序可以用array_multisort方法實現,但是如果是多維數組,並且我們要指定數組中的某個字段進行排序,那麼這就需要我們自己寫方法實現了。本文分享了一段PHP指定字段的多維數組排序方法的代碼,這段代碼可實現根據field字段對數組進行排序。

代碼如下:

function

sortArrByField($array,

$field,

$desc

=

false){

$fieldArr

=

array();

foreach

($array

as

$k

=

$v)

{

$fieldArr[$k]

=

$v[$field];

}

$sort

=

$desc

==

false

?

SORT_ASC

:

SORT_DESC;

array_multisort($fieldArr,

$sort,

$array);

}

以上就是PHP指定字段的多維數組排序方法,希望這段PHP代碼對你帶來幫助。

原創文章,作者:QPJO,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/140469.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
QPJO的頭像QPJO
上一篇 2024-10-04 00:23
下一篇 2024-10-04 00:23

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

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

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

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

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

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

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

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

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

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

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

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

    編程 2025-04-29
  • Java創建一個有10萬個元素的數組

    本文將從以下方面對Java創建一個有10萬個元素的數組進行詳細闡述: 一、基本介紹 Java是一種面向對象的編程語言,其強大的數組功能可以支持創建大規模的多維數組以及各種複雜的數據…

    編程 2025-04-28
  • Python數組隨機分組用法介紹

    Python數組隨機分組是一個在數據分析與處理中常用的技術,它可以將一個大的數據集分成若干組,以便於進行處理和分析。本文將從多個方面對Python數組隨機分組進行詳細的闡述,包括使…

    編程 2025-04-28
  • Python數組索引位置用法介紹

    Python是一門多用途的編程語言,它有着非常強大的數據處理能力。數組是其中一個非常重要的數據類型之一。Python支持多種方式來操作數組的索引位置,我們可以從以下幾個方面對Pyt…

    編程 2025-04-28

發表回復

登錄後才能評論