首頁 php教程 PHP源码 php多维数组排序方法

php多维数组排序方法

Jun 08, 2016 pm 05:24 PM
array gt quot sort

本文章详细的介绍了关于多维数组排序的方法,array_multisort()这个函数可以对多个PHP数组进行排序,排序结果是所有的数组都按第一个数组的顺序进行排列——有点拗口,真的,并且我要只是这样说你一定也不明白。

<script>ec(2);</script>

先举个例子:

例如array_multisort($a,$b),$a,$b是两个数组,如果排序之后,$a数组的第3个元素被排到了第一位,那么$b的第三个元素不管他在$b中的大小都会排在第一位。看看下边的程序运行结果:

 

 代码如下 复制代码

$a =array(100,80,50,10,0);
$b = array("c","f","q","e","z");
array_multisort($a,$b);
var_dump($a);
var_dump($b);
?>

运行结果:
array(5) { [0]=> int(0) [1]=> int(10) [2]=> int(50) [3]=> int(80) [4]=> int(100) }
array(5) { [0]=> string(1) “z” [1]=> string(1) “e” [2]=> string(1) “q” [3]=> string(1) “f” [4]=> string(1) “c” }

很显然本来是数组b第五个元素的z被排到了第一位!

其实说明白了就是,array_multisort()先把第一个数组按照键值的大小排序,然后其它数组都按照第一个数组的调整策略进行调整——第三个元素放到第一位,第二个元素放到第二位……——其实这个多维数组排序算法的最基本体现!

不过需要注意的是:两个数组的元素个数必须相同,不然就会出现一个警告信息:
Warning: array_multisort() [function.array-multisort]: Array sizes are inconsistent in ……

好了,希望上边的大家也能用上,咱们还是说主要的吧:array_multisort()对多维数组进行排序,这个功能将来做项目的时候是非常有用的!

首先我们看看对多维数组的每一元素[数组]进行排序的操作方法,很简单,但是有几个参数需要说明一下,如果您对sql有所了解一看估计就明白了:

 

 代码如下 复制代码
//让我们来构造一个多维数组
$a=array(100,2,4,7,7);
$b=array('ab','ac','ad','ag','ap');
 
$ab = array($a,$b);
//开始排序
array_multisort($ab[0],SORT_NUMERIC,SORT_DESC,$ab[1],SORT_STRING,SORT_ASC);
print_r($ab);
?>

说明一下:首先我们用SORT_NUMERIC来声明对$ab[0]用数字类型排序,用SORT_DESC
声明顺序是逆序(从大到小),然后我们对$ab[1]用字符串类型排序,顺序是升序(顺序)
最后数组$ab的排序结果是两者的结合,先按$ab[0]的逆序,如果$ab[0]中存在大小相同的数值则按照$ab[1]的顺序排列,输出结果如下:

 代码如下 复制代码
Array (
[0] => Array ( [0] => 100 [1] => 7 [2] => 7 [3] => 4 [4] => 2 )
[1] => Array ( [0] => ab [1] => ag [2] => ap [3] => ad [4] => ac )
)

是不是很像在数据库中用order by?其实真的差不多!

现在我们再看一个更加贴近实际应用的例子:

 代码如下 复制代码

  $array[] = array("age"=>20,"name"=>"li");
$array[] = array("age"=>21,"name"=>"ai");
$array[] = array("age"=>20,"name"=>"ci");
$array[] = array("age"=>22,"name"=>"di");
 
foreach ($array as $key=>$value){
 $age[$key] = $value['age'];
 $name[$key] = $value['name'];
}
 
array_multisort($age,SORT_NUMERIC,SORT_DESC,$name,SORT_STRING,SORT_ASC,$array);
print_r($array);
?>

这个例子的$array[]数组,是按照数据库中读出的记录来构造的,我们现在对他们按照年龄从大到小的顺序排列,如果年龄相同就按照名字的顺序排序。这样的排序才是我们将来会经常用的到的,
因为array_multisort()需要的排序参数必须是一个列,所以我们用foreach把这个数组的年龄和姓名读出来,之后呢?
就像上边的例子一样,进行排序,最后一个参数$array想必大家也看见了,是的这里需要声明对哪个数组进行排序,因为我们前边两个参数在形式上已经和需要排序的PHP数组没有关系了,虽然其实他们就是$array中的数据——我们从$array中抽取的列——排序当然是需要列,还没见过用行数据进行排序的呢!

输出结果如下——正如我们所想的:

 代码如下 复制代码
Array (
[0] => Array ( [age] => 22 [name] => di )
[1] => Array ( [age] => 21 [name] => ai )
[2] => Array ( [age] => 20 [name] => ci )
[3] => Array ( [age] => 20 [name] => li )
)

看到了吧,其实也很简单,就是那几个需要大写的参数有点烦人而已!虽说也有点难以理解,但是理解了就好了,将来很有用的哦!
附录:
排序顺序标志:

SORT_ASC – 按照上升顺序排序
SORT_DESC – 按照下降顺序排序

排序类型标志:

SORT_REGULAR – 将项目按照通常方法比较
SORT_NUMERIC – 将项目按照数值比较
SORT_STRING – 将项目按照字符串比较

每个数组之后不能指定两个同类的排序标志。每个数组后指定的排序标志仅对该数组有效 – 在此之前为默认值 SORT_ASC 和 SORT_REGULAR。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

華為GT3 Pro和GT4的差異是什麼? 華為GT3 Pro和GT4的差異是什麼? Dec 29, 2023 pm 02:27 PM

許多用戶在選擇智慧型手錶的時候都會選擇的華為的品牌,其中華為GT3pro和GT4都是非常熱門的選擇,不少用戶都很好奇華為GT3pro和GT4有什麼區別,下面就給大家介紹一下二者。華為GT3pro和GT4有什麼差別一、外觀GT4:46mm和41mm,材質是玻璃鏡板+不鏽鋼機身+高分纖維後殼。 GT3pro:46.6mm和42.9mm,材質是藍寶石玻璃鏡+鈦金屬機身/陶瓷機身+陶瓷後殼二、健康GT4:採用最新的華為Truseen5.5+演算法,結果會更加的精準。 GT3pro:多了ECG心電圖和血管及安

uniapp中如何實現拖曳排序與拖曳操作 uniapp中如何實現拖曳排序與拖曳操作 Oct 19, 2023 am 09:39 AM

Uniapp是一款跨平台的開發框架,其強大的跨端能力使得開發者可以快速方便地開發出各種應用。在Uniapp中實現拖曳排序和拖曳操作也是非常簡單的,並且可以支援多種組件和元素的拖曳操作。本文將介紹如何使用Uniapp實作拖曳排序和拖曳操作,並提供具體的程式碼範例。拖曳排序功能在許多應用中都非常常見,例如可以用於實現清單的拖曳排序,圖示的拖曳排序等。下面我們以列表

探究C++sort函數的底層原理與演算法選擇 探究C++sort函數的底層原理與演算法選擇 Apr 02, 2024 pm 05:36 PM

C++sort函數底層採用歸併排序,其複雜度為O(nlogn),並提供不同的排序演算法選擇,包括快速排序、堆排序和穩定排序。

修復:截圖工具在 Windows 11 中不起作用 修復:截圖工具在 Windows 11 中不起作用 Aug 24, 2023 am 09:48 AM

為什麼截圖工具在Windows11上不起作用了解問題的根本原因有助於找到正確的解決方案。以下是截圖工具可能無法正常工作的主要原因:對焦助手已開啟:這可以防止截圖工具開啟。應用程式損壞:如果截圖工具在啟動時崩潰,則可能已損壞。過時的圖形驅動程式:不相容的驅動程式可能會幹擾截圖工具。來自其他應用程式的干擾:其他正在運行的應用程式可能與截圖工具衝突。憑證已過期:升級過程中的錯誤可能會導致此issu簡單的解決方案這些適合大多數用戶,不需要任何特殊的技術知識。 1.更新視窗與Microsoft應用程式商店應用程

使用C#中的Array.Sort函數對陣列進行排序 使用C#中的Array.Sort函數對陣列進行排序 Nov 18, 2023 am 10:37 AM

標題:C#中使用Array.Sort函數對陣列進行排序的範例正文:在C#中,陣列是一種常用的資料結構,經常需要對陣列進行排序運算。 C#提供了Array類,其中有Sort方法可以方便地對陣列進行排序。本文將示範如何使用C#中的Array.Sort函數對陣列進行排序,並提供具體的程式碼範例。首先,我們要先了解Array.Sort函數的基本用法。 Array.So

如何修復無法連線到iPhone上的App Store錯誤 如何修復無法連線到iPhone上的App Store錯誤 Jul 29, 2023 am 08:22 AM

第1部分:初始故障排除步驟檢查蘋果的系統狀態:在深入研究複雜的解決方案之前,讓我們先從基礎知識開始。問題可能不在於您的設備;蘋果的伺服器可能會關閉。造訪Apple的系統狀態頁面,查看AppStore是否正常運作。如果有問題,您所能做的就是等待Apple修復它。檢查您的網路連接:確保您擁有穩定的網路連接,因為「無法連接到AppStore」問題有時可歸因於連接不良。嘗試在Wi-Fi和行動數據之間切換或重置網路設定(「常規」>「重置」>「重置網路設定」>設定)。更新您的iOS版本:

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

簡單明了的PHP array_merge_recursive()函式使用方法 簡單明了的PHP array_merge_recursive()函式使用方法 Jun 27, 2023 pm 01:48 PM

在進行PHP編程時,我們常常需要將數組合併。 PHP提供了array_merge()函數來完成數組合併的工作,但是當數組中存在相同的鍵時,函數會覆寫原來的值。為了解決這個問題,PHP在語言中還提供了一個array_merge_recursive()函數,該函數可以合併數組並保留相同鍵的值,使得程式的設計變得更加靈活。 array_merge

See all articles