本文章先是介紹關(guān)于php中的數(shù)組定義與數(shù)組的銷毀,之后再用一個(gè)實(shí)例來說明一維數(shù)據(jù)的排序方法。
PHP數(shù)組的定義,代碼如下:
在本代碼片段的第一行,定義了一個(gè)一維數(shù)組$array,第二行的時(shí)候我們格式化輸出了這個(gè)數(shù)組,結(jié)果是這樣的:
現(xiàn)在兄弟解釋一下這個(gè)輸出結(jié)果,首先這個(gè)數(shù)組的輸出結(jié)果的第一行,array(3)告訴我們這是個(gè)有三個(gè)元素的數(shù)組,首先0號元素是一個(gè)長度為3的字符串(string(3))…篇幅關(guān)系剩下兩個(gè)就不說了吧,吼吼……,這說明什么呢?這說明在PHP中如果我們不為數(shù)組指定下標(biāo)的話,那么他就自己自作主張的從零開始給我們弄一個(gè)下標(biāo)出來——也就是PHP數(shù)組中的鍵名;再看看下邊的例子:
這一次我們定義數(shù)組的時(shí)候,為第二個(gè)元素指定了下標(biāo)(從此以后,在本文中就叫做鍵名了,下標(biāo)有點(diǎn)含糊不清!),第二個(gè)元素指定了鍵名(hello),咱們再看看輸出結(jié)果,代碼如下:
我想你也像我一樣看到了一個(gè)很智能的現(xiàn)象,第一個(gè)元素的鍵名還是0——這個(gè)我們可以理解,因?yàn)槲覀儧]有指定,而PHP數(shù)組必須要有一個(gè)鍵名,PHP就自作主張從零開始創(chuàng)立了一個(gè)鍵名;第二個(gè)元素的時(shí)候,我們指定了鍵名,PHP就尊重我們的意見用了這個(gè)鍵名;復(fù)雜的事情在第三個(gè)元素,第三個(gè)元素,看起來也很簡單,我們沒有指定鍵名,PHP自動(dòng)的把最大整數(shù)鍵名加上1,作為了鍵名。但是大家想過沒有,如果我們把第一個(gè)元素的鍵名修改為“-5”,第二個(gè)元素鍵名不變,結(jié)果會(huì)是什么呢?我們拭目以待,代碼如下:
如果你想當(dāng)然的認(rèn)為,第三個(gè)元素的鍵名應(yīng)該是-4,那么我告訴你在PHP4.3.0之前這個(gè)想法是對的,但是之后就錯(cuò)了,現(xiàn)在也就是PHP4.3.0之后的版本你將看到如下結(jié)果:
是的第三個(gè)元素是從0開始的,也就是不管你的負(fù)數(shù)有多小,下一個(gè)元素要是讓PHP來定義鍵名的話,那么他就是從0開始——記住這個(gè)地方說的是,在現(xiàn)有的鍵名中如果最大的依然是個(gè)負(fù)數(shù),不管負(fù)數(shù)有多小,PHP也是從零開始下一個(gè)鍵名。
PHP數(shù)組的銷毀很簡單,像銷毀其他變量一樣。
銷毀整個(gè)數(shù)組:unset($array)
銷毀數(shù)組中的一個(gè)元素:unset($array[-5])
不管在現(xiàn)實(shí)生活中還是程序世界里,順序總是很重要——真不敢想象一個(gè)沒有順序的世界會(huì)什么樣子!PHP數(shù)組也不例外。PHP提供了四組針對PHP數(shù)組進(jìn)行排序的函數(shù),前三種都是針對一維數(shù)組的,我們先說這三種,第四種對多維數(shù)組的排序在下一篇文章中說,那個(gè)有點(diǎn)復(fù)雜。
第一組:sort 和 rsort,按照PHP數(shù)組鍵值的順序asc和逆序desc進(jìn)行排序,同時(shí)破壞原來數(shù)組的索引關(guān)系——其實(shí)是刪除索引之后重新建立從0開始的數(shù)字索引,看一下例程,代碼如下:
看一下第一個(gè)輸出結(jié)果,第一個(gè)輸出:
第二個(gè)輸出:
發(fā)現(xiàn)沒有我們原來定義的索引a哪里去了?哪里去了?可以肯定的說是被他們無情的刪除了,你要是對原來的索引關(guān)系并不在意的話,可以使用他們!
第二組函數(shù):asort 和 arsort ,這兩個(gè)函數(shù)就比較厲害一點(diǎn)了,只要他們可以保留數(shù)組原有的索引關(guān)系,把上例的sort 和 rsort 分別用這兩個(gè)函數(shù)替換一下,看運(yùn)行結(jié)果:
這個(gè)一看就明白的,不用說了吧!
第三組PHP數(shù)組排序函數(shù):krsort 和 ksort 這兩個(gè)不同于以上兩組,這兩函數(shù)是對鍵名進(jìn)行排序的,大家可以把上例的函數(shù)替換成這兩個(gè),看看具體運(yùn)行結(jié)果,這里也不說了,不然這個(gè)文章寫的就太長了,怕有些兄弟沒有耐心看到本文的重點(diǎn),雖然重點(diǎn)就在下邊!
通過自定義函數(shù)對PHP數(shù)組進(jìn)行排序,有三個(gè)函數(shù)分別是:
uasort 通過自定義函數(shù)對PHP數(shù)組的鍵值進(jìn)行排序,并且保留原來的索引關(guān)系。
uksort 通過自定義函數(shù)對PHP數(shù)組的鍵名進(jìn)行排序,并且保留原來的索引關(guān)系。
usort通過自定義函數(shù)對PHP數(shù)組的鍵值進(jìn)行排序,并且刪除原來的索引關(guān)系,從零開始建立新的索引。
這個(gè)地方當(dāng)然需要一個(gè)例子,首先頂一個(gè)函數(shù),這個(gè)函數(shù)需要接受兩個(gè)參數(shù),并且返回值是一定的,第一個(gè)參數(shù)等于第二個(gè)參數(shù)的時(shí)候返回0,小于的時(shí)候返回-1,大于返回1,代碼如下:
輸出結(jié)果:
呵呵……是不是比不排序還亂呢?我們這里只是演示了使用的方法而已,具體你用到的時(shí)候自己搞吧!你要是不對這些數(shù)值進(jìn)行操作之后再比較,例如我們這里:
$a+=1;$b+=3;//改變這些值之后進(jìn)行比較
在PHP手冊中,一共定義了74個(gè)數(shù)組函數(shù),涵蓋了PHP數(shù)組的定義,賦值,排序,數(shù)值操作,比較,以及對數(shù)組的鍵名,鍵值反轉(zhuǎn)……等等我們幾乎能夠想到的所有功能。