如何對PHP陣列進行排序?
第一種方法:sort()
asort()函式是對陣列進行排序并保持索引關系
注意:sort大多是用來排序數字索引陣列的,如果把一個關聯陣列放到sort里排序,那么陣列的鍵會丟失,另外UTF8中文無法排序,
下面是sort函式的小例子,具體代碼如下:
從 A-Z, a-z, 數字從小到大 進行排序
<?php $arr = ['g','h','d','a','z','F','b','c','e','A','f']; print_r($arr); sort($arr); print_r($arr);

如果值是數字使用sort函式
<?php $arr = [8,1,2,10,3,4,5]; print_r($arr); sort($arr); print_r($arr);

如果陣列的值是數字,使用 sort()函式,就會從小到大,進行排序!
第二種方法是對關聯陣列升序:asort()和ksort()
既然關聯陣列不能使用sort來排序,那么應該使用什么函式呢?我們推薦使用asort,用法與sort一樣,不過排序之后,鍵仍然能保留
<?php $arr['one'] = 33; $arr['two'] = 100; $arr['three'] = 3; print_r($arr); asort($arr); print_r($arr);
輸出結果為

關聯陣列是由鍵和值組成的,那么asort到底是以什么為依據排序的?
我們可以證明asort實際上是使用陣列的值進行排序的,那么如果想對鍵進行排序,我們可以使用ksort,
ksort()函式是對陣列按照鍵名排序,
<?php $arr['one'] = 33; $arr['two'] = 100; $arr['three'] = 3; print_r($arr); ksort($arr); print_r($arr);

PHP陣列如何合并?
array_merge():它是將一個陣列單元或者多個陣列單元進行合并起來,一個陣列中的值,賦加在前面一個的陣列后面,回傳作為結果的陣列,
1.假設輸入的陣列中的字串鍵名有相同的,那么該鍵的鍵值就是最后一個鍵名相對應的值,這里大家要注意一點,后面的值會覆寫前相同的值!具體代碼如下:
<?php $arr1 = ["name1"=>"a","name2"=>"b","name3"=>"c"]; $arr2 = ["name5"=>"d","name2"=>"e"]; $newarr = array_merge($arr1,$arr2); print_r($newarr);
輸出結果為:

2.如果一個陣列是數字鍵名的話,那么鍵名會是以連續的方式重新索引,那么后面的值就不會覆寫原來的值,而是附加到后面,具體代碼如下:
<?php $arr1 = [1=>"a",2=>"b",3=>"c"]; $arr2 = [2=>"d",3=>"e"]; $newarr = array_merge($arr1,$arr2); print_r($newarr);
輸出結果為:

PHP陣列的截取,等分以及替換部分陣列
什么是截取陣列?(array_slice)
array_slice從陣列中取出一段元素,第一個引數是原陣列,第二個引數是開始下標(牢記陣列是從0開始的),第三個引數是從下標開始取出的元素個數,如果不設定,默認一直取到陣列末尾!
<?php $arr = [1,2,3,4,5,6]; $newarr = array_slice($arr,1,2); print_r($newarr);
從下標1開始截取,取2個元素,賦給新的變數
輸出的結果為:

array_slice()的第三個引數不寫
<?php $arr = [1,2,3,4,5,6]; $newarr = array_slice($arr,1); print_r($newarr);
輸出的結果為:

當array_slice()的第三個引數不寫,那么就會默認截取到陣列的最后一個元素!array_slice()函式的第二引數就是指定從哪個下標開始截取!
array_slice僅僅是將陣列中的一段取出重新賦值給別的陣列,而原陣列是不受影響的
什么是替換部分陣列?(array_splice)
array_splice() 函式與 array_slice() 函式類似,選擇陣列中的一系列元素,但不回傳,而是洗掉它們并用其它值代替,換句話說就是去掉陣列中的某一部分并用其它值取代,
注意:
1.如果 replacement 不是陣列,會被 型別轉換 成陣列 (例如: (array) $replacement), 當傳入的 replacement 是個物件或者 NULL,會導致未知的行為出現,
2.注意 input 中的數字鍵名不被保留,
<?php $arr = [1,2,3,4,5,6]; array_splice($arr,1,2,array(11,22,33)); print_r($arr);
上面的示例中,我們是將替換后將其賦給一個新的陣列,那么如果沒有新的陣列呢?我們看下面的實體:
<?php $arr = [1,2,3,4,5,6]; array_splice($arr,1,2); print_r($arr);
輸出的結果為:

從輸出的結果中就可以看出,如果沒有新的陣列,那么就相當于 array_slice,切掉相關位置的陣列!
array_splice和array_slice兩個函式的相同點和不同點
相同點:
可以實作對陣列,進行指定下標位置,和指定元素個數進行陣列切割
(其實,就是洗掉指定的陣列元素)
不同點:
array_slice 是傳值函式, 原陣列不會變化,切割后,可以賦給一個新陣列!
array_splice是傳址函式,會直接修改原陣列,可以設定新的元素,去替換被切割掉的陣列元素!
什么是等分陣列?(array_chunk)
array_chunk()函式是將陣列中的元素數量等分的切割成一個二維陣列,其中每個陣列的單元數目由第二個引數 size 決定,陣列的最后一個單元數目可能會少于 size 個,下面我們一起看下語法格式:
<?php $arr = [1,2,3,4,5,6,7,8,9,10]; $newarr = array_chunk($arr,3); print_r($newarr);
輸出結果為:

PHP陣列隨機亂序和反序的實體詳解
一. 什么是隨機亂序?(shuffle)
shuffle 就是 打亂陣列,
本函式打亂(隨機排列單元的順序)一個陣列, 它使用的是偽亂數產生器,并不適合密碼學的場合,
shuffle實體用法:
下面我們舉例來詳解shuffle函式,具體代碼如下:
<?php $arr = [1,2,3,4,5,6,7,8,9,10]; shuffle($arr); print_r($arr);
輸出結果為:

說明:關聯陣列被shuffle后,鍵會丟失,從上面的實體中大家應該也能看的出來!
二. 什么是反序?(array_reverse)
array_reverse — 回傳單元順序相反的陣列,反序是將一個原始的陣列中的每個元素的順序翻轉
array_reverse() 接受陣列 array 作為輸入并回傳一個單元為相反順序的新陣列,如果preserve_keys 為 TRUE 則保留原來的鍵名,
<?php $arr = [ "1"=>"a", "2"=>"b", "3"=>"c" ]; $newarr = array_reverse($arr); print_r($newarr);
輸出結果為:

鍵是數字時,反序后默認鍵會重置為0、1、2……
鍵是數字時保留鍵值示例代碼:
<?php $arr = [ "1"=>"a", "2"=>"b", "3"=>"c" ]; $newarr = array_reverse($arr,true); print_r($newarr);

注意:使用array_reverse函式時原陣列不受影響, 會return一個新陣列!
PHP陣列的倒序排列
rsort() 函式對陣列的元素按照鍵值進行逆向排序,與 arsort() 的功能基本相同,
<?php $arr = [ "1"=>"100", "2"=>"300", "3"=>"200" ]; rsort($arr); print_r($arr);
輸出的結果為:

說明:該函式為 array 中的單元賦予新的鍵名,這將洗掉原有的鍵名而不僅是重新排序,
arsort()函式對陣列進行排序,陣列的索引保持和單元的關聯,主要用于對那些單元順序很重要的結合陣列進行排序,
<?php $arr = [ "1"=>"100", "2"=>"300", "3"=>"200" ]; arsort($arr); print_r($arr);
輸出的結果為:

說明:arsort函式和rsort函式的區別就是在于arsort()函式對關聯陣列按照鍵值進行降序排序,而rsort函式為 array 中的單元賦予新的鍵名,這將洗掉原有的鍵名而不僅是重新排序,
krsort — 對陣列按照鍵名逆向排序
krsort對陣列按照鍵名逆向排序,保留鍵名到資料的關聯,主要用于結合陣列,
<?php $arr = [ "name1"=>"100", "name2"=>"300", "name3"=>"200" ]; krsort($arr); print_r($arr);
輸出結果為:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/40934.html
標籤:PHP
上一篇:php陣列的使用
