詳解php如何對數(shù)組進(jìn)行排序
如何對PHP數(shù)組進(jìn)行排序
第一種方法:sort()
asort()函數(shù)是對數(shù)組進(jìn)行排序并保持索引關(guān)系
注意:sort大多是用來排序數(shù)字索引數(shù)組的,如果把一個(gè)關(guān)聯(lián)數(shù)組放到sort里排序,那么數(shù)組的鍵會丟失。另外UTF8中文無法排序。
下面是sort函數(shù)的小例子,具體代碼如下:
從 A-Z, a-z, 數(shù)字從小到大 進(jìn)行排序
<?php $arr = ['g','h','d','a','z','F','b','c','e','A','f']; print_r($arr); sort($arr); print_r($arr);
如果值是數(shù)字使用sort函數(shù)
<?php $arr = [8,1,2,10,3,4,5]; print_r($arr); sort($arr); print_r($arr);
如果數(shù)組的值是數(shù)字,使用 sort()函數(shù),就會從小到大,進(jìn)行排序!
第二種方法是對關(guān)聯(lián)數(shù)組升序:asort()和ksort()
既然關(guān)聯(lián)數(shù)組不能使用sort來排序,那么應(yīng)該使用什么函數(shù)呢?我們推薦使用asort,用法與sort一樣,不過排序之后,鍵仍然能保留
<?php $arr['one'] = 33; $arr['two'] = 100; $arr['three'] = 3; print_r($arr); asort($arr); print_r($arr);
輸出結(jié)果為
關(guān)聯(lián)數(shù)組是由鍵和值組成的,那么asort到底是以什么為依據(jù)排序的?
我們可以證明asort實(shí)際上是使用數(shù)組的值進(jìn)行排序的,那么如果想對鍵進(jìn)行排序,我們可以使用ksort。
ksort()函數(shù)是對數(shù)組按照鍵名排序。
<?php $arr['one'] = 33; $arr['two'] = 100; $arr['three'] = 3; print_r($arr); ksort($arr); print_r($arr);
PHP數(shù)組如何合并
array_merge():它是將一個(gè)數(shù)組單元或者多個(gè)數(shù)組單元進(jìn)行合并起來,一個(gè)數(shù)組中的值,賦加在前面一個(gè)的數(shù)組后面,返回作為結(jié)果的數(shù)組。
1.假設(shè)輸入的數(shù)組中的字符串鍵名有相同的,那么該鍵的鍵值就是最后一個(gè)鍵名相對應(yīng)的值,這里大家要注意一點(diǎn),后面的值會覆蓋前相同的值!具體代碼如下:
<?php $arr1 = ["name1"=>"a","name2"=>"b","name3"=>"c"]; $arr2 = ["name5"=>"d","name2"=>"e"]; $newarr = array_merge($arr1,$arr2); print_r($newarr);
輸出結(jié)果為:
2.如果一個(gè)數(shù)組是數(shù)字鍵名的話,那么鍵名會是以連續(xù)的方式重新索引,那么后面的值就不會覆蓋原來的值,而是附加到后面。具體代碼如下:
<?php $arr1 = [1=>"a",2=>"b",3=>"c"]; $arr2 = [2=>"d",3=>"e"]; $newarr = array_merge($arr1,$arr2); print_r($newarr);
輸出結(jié)果為:
PHP數(shù)組的截取,等分以及替換部分?jǐn)?shù)組
什么是截取數(shù)組?(array_slice)
array_slice從數(shù)組中取出一段元素,第一個(gè)參數(shù)是原數(shù)組,第二個(gè)參數(shù)是開始下標(biāo)(牢記數(shù)組是從0開始的),第三個(gè)參數(shù)是從下標(biāo)開始取出的元素個(gè)數(shù),如果不設(shè)置,默認(rèn)一直取到數(shù)組末尾!
<?php $arr = [1,2,3,4,5,6]; $newarr = array_slice($arr,1,2); print_r($newarr);
從下標(biāo)1開始截取,取2個(gè)元素,賦給新的變量
輸出的結(jié)果為:
array_slice()的第三個(gè)參數(shù)不寫
<?php $arr = [1,2,3,4,5,6]; $newarr = array_slice($arr,1); print_r($newarr);
輸出的結(jié)果為:
當(dāng)array_slice()的第三個(gè)參數(shù)不寫,那么就會默認(rèn)截取到數(shù)組的最后一個(gè)元素!array_slice()函數(shù)的第二參數(shù)就是指定從哪個(gè)下標(biāo)開始截??!
array_slice僅僅是將數(shù)組中的一段取出重新賦值給別的數(shù)組,而原數(shù)組是不受影響的
什么是替換部分?jǐn)?shù)組?(array_splice)
array_splice() 函數(shù)與 array_slice() 函數(shù)類似,選擇數(shù)組中的一系列元素,但不返回,而是刪除它們并用其它值代替,換句話說就是去掉數(shù)組中的某一部分并用其它值取代。
注意:
1.如果 replacement 不是數(shù)組,會被 類型轉(zhuǎn)換 成數(shù)組 (例如: (array) $replacement)。 當(dāng)傳入的 replacement 是個(gè)對象或者 NULL,會導(dǎo)致未知的行為出現(xiàn)。
2.注意 input 中的數(shù)字鍵名不被保留。
<?php $arr = [1,2,3,4,5,6]; array_splice($arr,1,2,array(11,22,33)); print_r($arr);
上面的示例中,我們是將替換后將其賦給一個(gè)新的數(shù)組,那么如果沒有新的數(shù)組呢?我們看下面的實(shí)例:
<?php $arr = [1,2,3,4,5,6]; array_splice($arr,1,2); print_r($arr);
輸出的結(jié)果為:
從輸出的結(jié)果中就可以看出,如果沒有新的數(shù)組,那么就相當(dāng)于 array_slice,切掉相關(guān)位置的數(shù)組!
array_splice和array_slice兩個(gè)函數(shù)的相同點(diǎn)和不同點(diǎn)
相同點(diǎn):
可以實(shí)現(xiàn)對數(shù)組,進(jìn)行指定下標(biāo)位置,和指定元素個(gè)數(shù)進(jìn)行數(shù)組切割
(其實(shí),就是刪除指定的數(shù)組元素)
不同點(diǎn):
array_slice 是傳值函數(shù), 原數(shù)組不會變化,切割后,可以賦給一個(gè)新數(shù)組!
array_splice是傳址函數(shù),會直接修改原數(shù)組,可以設(shè)置新的元素,去替換被切割掉的數(shù)組元素!
什么是等分?jǐn)?shù)組?(array_chunk)
array_chunk()函數(shù)是將數(shù)組中的元素?cái)?shù)量等分的切割成一個(gè)二維數(shù)組,其中每個(gè)數(shù)組的單元數(shù)目由第二個(gè)參數(shù) size 決定。數(shù)組的最后一個(gè)單元數(shù)目可能會少于 size 個(gè),下面我們一起看下語法格式:
<?php $arr = [1,2,3,4,5,6,7,8,9,10]; $newarr = array_chunk($arr,3); print_r($newarr);
輸出結(jié)果為:
PHP數(shù)組隨機(jī)亂序和反序
一. 什么是隨機(jī)亂序?(shuffle)
shuffle 就是 打亂數(shù)組。
本函數(shù)打亂(隨機(jī)排列單元的順序)一個(gè)數(shù)組。 它使用的是偽隨機(jī)數(shù)產(chǎn)生器,并不適合密碼學(xué)的場合。
shuffle實(shí)例用法:
下面我們舉例來詳解shuffle函數(shù),具體代碼如下:
<?php $arr = [1,2,3,4,5,6,7,8,9,10]; shuffle($arr); print_r($arr);
輸出結(jié)果為:
說明:關(guān)聯(lián)數(shù)組被shuffle后,鍵會丟失,從上面的實(shí)例中大家應(yīng)該也能看的出來!
二. 什么是反序?(array_reverse)
array_reverse — 返回單元順序相反的數(shù)組,反序是將一個(gè)原始的數(shù)組中的每個(gè)元素的順序翻轉(zhuǎn)
array_reverse() 接受數(shù)組 array 作為輸入并返回一個(gè)單元為相反順序的新數(shù)組,如果preserve_keys 為 TRUE 則保留原來的鍵名。
<?php $arr = [ "1"=>"a", "2"=>"b", "3"=>"c" ]; $newarr = array_reverse($arr); print_r($newarr);
輸出結(jié)果為:
鍵是數(shù)字時(shí),反序后默認(rèn)鍵會重置為0、1、2……
鍵是數(shù)字時(shí)保留鍵值示例代碼:
<?php $arr = [ "1"=>"a", "2"=>"b", "3"=>"c" ]; $newarr = array_reverse($arr,true); print_r($newarr);
注意:使用array_reverse函數(shù)時(shí)原數(shù)組不受影響, 會return一個(gè)新數(shù)組!
PHP數(shù)組的倒序排列
rsort() 函數(shù)對數(shù)組的元素按照鍵值進(jìn)行逆向排序。與 arsort() 的功能基本相同。
<?php $arr = [ "1"=>"100", "2"=>"300", "3"=>"200" ]; rsort($arr); print_r($arr);
輸出的結(jié)果為:
說明:該函數(shù)為 array 中的單元賦予新的鍵名。這將刪除原有的鍵名而不僅是重新排序。
arsort()函數(shù)對數(shù)組進(jìn)行排序,數(shù)組的索引保持和單元的關(guān)聯(lián)。主要用于對那些單元順序很重要的結(jié)合數(shù)組進(jìn)行排序。
<?php $arr = [ "1"=>"100", "2"=>"300", "3"=>"200" ]; arsort($arr); print_r($arr);
輸出的結(jié)果為:
說明:arsort函數(shù)和rsort函數(shù)的區(qū)別就是在于arsort()函數(shù)對關(guān)聯(lián)數(shù)組按照鍵值進(jìn)行降序排序,而rsort函數(shù)為 array 中的單元賦予新的鍵名。這將刪除原有的鍵名而不僅是重新排序。
krsort — 對數(shù)組按照鍵名逆向排序
krsort對數(shù)組按照鍵名逆向排序,保留鍵名到數(shù)據(jù)的關(guān)聯(lián)。主要用于結(jié)合數(shù)組。
<?php $arr = [ "name1"=>"100", "name2"=>"300", "name3"=>"200" ]; krsort($arr); print_r($arr);
輸出結(jié)果為:
以上就是詳解php如何對數(shù)組進(jìn)行排序的詳細(xì)內(nèi)容,更多關(guān)于php數(shù)組排序的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
php之header的不同用法總結(jié)(實(shí)例講解)
下面小編就為大家分享一篇php之header的不同用法總結(jié)(實(shí)例講解),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-11-11利用 fsockopen() 函數(shù)開放端口掃描器的實(shí)例
下面小編就為大家?guī)硪黄?fsockopen() 函數(shù)開放端口掃描器的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08學(xué)習(xí)PHP Cookie處理函數(shù)
這篇文章主要為大家詳細(xì)介紹了PHP Cookie處理函數(shù)的使用方法,感興趣的小伙伴們可以參考一下2016-08-08ThinkPHP框架實(shí)現(xiàn)導(dǎo)出excel數(shù)據(jù)的方法示例【基于PHPExcel】
這篇文章主要介紹了ThinkPHP框架實(shí)現(xiàn)導(dǎo)出excel數(shù)據(jù)的方法,結(jié)合實(shí)例形式分析了thinkPHP添加org擴(kuò)展基于PHPExcel進(jìn)行Excel數(shù)據(jù)的導(dǎo)出操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-05-05Yii結(jié)合CKEditor實(shí)現(xiàn)圖片上傳功能
這篇文章主要介紹了Yii結(jié)合CKEditor實(shí)現(xiàn)圖片上傳功能,Yii是大名鼎鼎的PHP開發(fā)框架,CKEditor則是大名鼎鼎的所見即所得編輯器,需要的朋友可以參考下2014-06-06php 二維數(shù)組快速排序算法的實(shí)現(xiàn)代碼
這篇文章主要介紹了php 二維數(shù)組快速排序算法的實(shí)現(xiàn)代碼的相關(guān)資料,希望通過本文能幫助到大家,讓大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-10-10DWZ+ThinkPHP開發(fā)時(shí)遇到的問題分析
這篇文章主要介紹了DWZ+ThinkPHP開發(fā)時(shí)遇到的問題,結(jié)合實(shí)例形式分析了DWZ+ThinkPHP在ajax調(diào)用中出現(xiàn)錯(cuò)誤問題的解決方法,需要的朋友可以參考下2016-12-12解決Laravel5.2 Auth認(rèn)證退出失效的問題
今天在做登陸認(rèn)證時(shí)遇到了個(gè)問題,以為是我的解決方法,希望對大家有所幫助吧2019-10-10