一.什么是數(shù)組
目前成都創(chuàng)新互聯(lián)已為數(shù)千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計(jì)、沁源網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。傳統(tǒng)上把數(shù)組(array)定義為一組有某種共同特性的元素,包括相似性和類型。每個(gè)元素由一個(gè)特殊的標(biāo)識(shí)符來區(qū)分,稱之為鍵(key);而每個(gè)鍵對(duì)應(yīng)一個(gè)值(value)。
李彥宏 | 周鴻祎 | 馬云 | 俞敏洪 | 李開復(fù) | 吳祁 |
依照上表,我們創(chuàng)建一個(gè)數(shù)組。
第一種:
$userNames=array('李彥宏','周鴻祎','馬云','俞敏洪','李開復(fù)','吳祁');
這是索引數(shù)組初始化:
數(shù)字索引的初始值是從0開始計(jì)算的:
userNames[0]---userNames[5],代表這6個(gè)人的名字。
第二種:
通過range()函數(shù)自動(dòng)創(chuàng)建一個(gè)數(shù)組
$numbers=range(1,10) $letters=range('a','z')
可以加第三個(gè)參數(shù)$numbers=range(1,10,2),第三個(gè)參數(shù)表示步長
訪問數(shù)組的內(nèi)容:
要訪問一個(gè)變量的內(nèi)容,可以直接使用其名稱。如果該變量是一個(gè)數(shù)組,可以使用變量名稱和關(guān)鍵字或索引的組合來訪問其內(nèi)容。
$numbers[0]、$numbers[1]、$numbers[2];等。
改變數(shù)組的值:
$numbers[0]="Lee";
使用循環(huán)訪問數(shù)組
由于數(shù)組使用有序的數(shù)字作為索引,所以使用一個(gè)for循環(huán)就可以很容易地顯示數(shù)組的內(nèi)容:
for($i=0;$i<10;$i++) {
echo$numbers[$i];
}
也可以使用foreach循環(huán)來遍歷數(shù)組:
foreach($numbersas$value) {
echo$value;
}
測試是否為數(shù)組變量:is_array();
print_r 函數(shù):打印關(guān)于變量的易于理解的信息
二.自定義鍵數(shù)組
初始化相關(guān)數(shù)組
$ages=array('吳祁'=>19,'李炎恢'=>27,'胡心鵬'=>23);
訪問數(shù)組元素
$ages["吳祁"];
$ages["李炎恢"];
$ages["胡心鵬"];
追加數(shù)組:首先,創(chuàng)建只有一個(gè)元素的數(shù)組,然后追加兩個(gè)元素。
$ages=array("吳祁"=>19);
$ages["李炎恢"]=27;
$ages["胡心鵬"]=23;
直接添加數(shù)組:無需創(chuàng)建,直接添加,添加第一個(gè)元素自動(dòng)建立數(shù)組。
$ages["吳祁"]=19;
$ages["李炎恢"]=27;
$ages["胡心鵬"]=23;
使用循環(huán)語句:因?yàn)橄嚓P(guān)數(shù)組的索引不是數(shù)字,因此無法使用for循環(huán)語句中使用一個(gè)簡單的計(jì)數(shù)器對(duì)數(shù)組進(jìn)行操作。但是可以使用foreach循環(huán)或list()和each()結(jié)構(gòu)。
foreach($agesas$key=>$value) {
echo$key."=>".$value."
";
}
使用each()結(jié)構(gòu)打印$ages數(shù)組的內(nèi)容:each()函數(shù)返回?cái)?shù)組的當(dāng)前元素,并將下一個(gè)元素作為當(dāng)前元素。
while(!!$element=each($ages)) {
echo$element["key"];
echo"=>";
echo$element["value"];
echo"
";
}
使用list()函數(shù),可以用來將一個(gè)數(shù)組分解為一系列的值。可以按照如下方式將函數(shù)each()返回的兩個(gè)值分開:
list($name,$age)=each($ages);
當(dāng)使用each()函數(shù)時(shí),數(shù)組將記錄當(dāng)前元素。如果希望在相同的腳本中兩次使用該數(shù)組,就必須使用函數(shù)reset()將當(dāng)前元素重新設(shè)置到數(shù)組開始處。
reset($prices);
確定唯一的數(shù)組元素:array_unique();它會(huì)刪除掉里面相同值的元素。
置換數(shù)組鍵和值:array_flip();它會(huì)對(duì)調(diào)數(shù)組中的key和value;
三.數(shù)組里的數(shù)組
數(shù)組不一定就是一個(gè)關(guān)鍵字和值的簡單列表----數(shù)組中的每個(gè)位置用來保存另一個(gè)數(shù)組。使用這種方法,可以創(chuàng)建一個(gè)二維數(shù)組。可以把二維數(shù)組當(dāng)成一個(gè)矩陣,或者是一個(gè)具有寬度和高度或者行和列的網(wǎng)格。
二維表
產(chǎn)品名 | 數(shù)量 | 價(jià)格 |
蘋果 | 6 | 28.8 |
豬肉 | 2 | 32.1 |
餅干 | 3 | 45.3 |
$products=array(
array("蘋果",6,28.8),
array("豬肉",2,32.1),
array("餅干",3,45.3)
);
顯示這個(gè)二維數(shù)組:
echo"|".$products[0][0]."|".$products[0][1]."|".$products[0][2]."|
";
echo"|".$products[1][0]."|".$products[1][1]."|".$products[1][2]."|
";
echo"|".$products[2][0]."|".$products[2][1]."|".$products[2][2]."|
";
此外,還可以使用雙重for循環(huán)來實(shí)現(xiàn)同樣的效果:
for($row=0;$row<3;$row++) {
for($column=0;$column<3;$column++) {
echo"|".$products[$row][$column];
}
echo"|
";
}
使用列明的二維數(shù)組:
$products=array(
array("產(chǎn)品名"=>"蘋果","數(shù)量"=>6,"價(jià)格"=>28.8),
array("產(chǎn)品名"=>"豬肉","數(shù)量"=>2,"價(jià)格"=>32.1),
array("產(chǎn)品名"=>"餅干","數(shù)量"=>3,"價(jià)格"=>45.3)
);
顯示這個(gè)二維數(shù)組:
第一種方式:
for($row=0;$row<3;$row++) {
echo"|".$products[$row]["產(chǎn)品名"]."|".
$products[$row]["數(shù)量"]."|".$products[$row]["價(jià)格"]."|
";
}
第二種方式:
for($row=0;$row<3;$row++) {
while(!!list($key,$value)=each($products[$row])) {
echo"|".$value;
}
echo"|
";
}
四.數(shù)組的排序
對(duì)保存在數(shù)組中的相關(guān)數(shù)據(jù)進(jìn)行排序是一件非常有意義的事情。使用并且排序一個(gè)一維數(shù)組是非常簡單的。
使用sort()函數(shù)將數(shù)組按字母升序進(jìn)行排序。
$products=array("orange","banner","apple");
sort($products);
使用sort()函數(shù)將數(shù)字升序進(jìn)行排序。
$prices=array(100,10,4,23,78);
sort($prices);
sort()函數(shù)的第二個(gè)參數(shù)是可選的。這個(gè)可選參數(shù)可以傳遞SORT_REGULAR(默認(rèn)值)、SORT_NUMERIC或SORT_STRING。指定排序類型的功能是非常有用的。比如,當(dāng)要比較可能包含有數(shù)字2和12的字符串時(shí),從數(shù)字角度看,2要小于12,但是作為字符串,"12"卻要小于"2"。
使用asort()函數(shù)和ksort()函數(shù)對(duì)相關(guān)數(shù)組排序
創(chuàng)建一個(gè)包括3個(gè)產(chǎn)品及價(jià)格的數(shù)組,然后將它們按價(jià)格的升序進(jìn)行排序:
$prices=array("c"=>蘋果,"a"=>豬肉,"b"=>餅干);
asort($prices);
按說明排序使用ksort()函數(shù)
ksort($prices)
反向排序:sort()、asort()和ksort()都是正向排序,當(dāng)然也有相對(duì)應(yīng)的反向排序.
實(shí)現(xiàn)反向:rsort()、arsort()和krsort()。
在一些應(yīng)用程序中,可能希望按另一種方式對(duì)數(shù)組排序。函數(shù)shuffle()將數(shù)組個(gè)元素進(jìn)行隨機(jī)排序。函數(shù)array_reverse()給出一個(gè)原來數(shù)組的反向排序。
shuffle($pictures);
array_reverse($pictures);
array_unshift()函數(shù)將新元素添加到數(shù)組頭,array_push()函數(shù)將每個(gè)新元素添加到數(shù)組的末尾。
array_shift()刪除數(shù)組頭第一個(gè)元素,與其相反的函數(shù)是array_pop(),刪除并返回?cái)?shù)組末尾的一個(gè)元素。
array_rand()返回?cái)?shù)組中的一個(gè)或多個(gè)鍵。
五.數(shù)組的指針操作
在數(shù)組中瀏覽:each()、current()、reset()、end()、next()、pos()、prev();
調(diào)用next()或each()將使指針前移一個(gè)元素。調(diào)用each($array_name)會(huì)在指針前移一個(gè)位置之前返回當(dāng)前元素。next()函數(shù)則有些不同----調(diào)用next($array_name)是將指針前移,然后再返回新的當(dāng)前元素。
要反向遍歷一個(gè)數(shù)組,可以使用end()和prev()函數(shù)。prev()函數(shù)和next()函數(shù)相反。它是將當(dāng)前指針往回移一個(gè)位置然后再返回新的當(dāng)前元素。
六.統(tǒng)計(jì)數(shù)組個(gè)數(shù)
count()和sizeof()統(tǒng)計(jì)數(shù)組下標(biāo)的個(gè)數(shù)
array_count_values()統(tǒng)計(jì)數(shù)組內(nèi)下標(biāo)值的個(gè)數(shù)
七.將數(shù)組轉(zhuǎn)換成標(biāo)量變量:extract()
對(duì)于一個(gè)非數(shù)字索引數(shù)組,而該數(shù)組又有許多關(guān)鍵字-值對(duì),可以使用函數(shù)extract()將它們轉(zhuǎn)換成一系列的標(biāo)量變量。extract()函數(shù)原型如下:
extract(array var_array,[intextract_type],[string prefix]);
函數(shù)extract()的作用是通過一個(gè)數(shù)組創(chuàng)建一系列的標(biāo)量變量,這些變量的名稱必須是數(shù)組中關(guān)鍵字的名稱,而變量值則是數(shù)組中的值。
$array=array("key1"=>"value1","key2"=>"value2","key3"=>"value3");
extract($array);//講數(shù)組中的鍵變?yōu)樽兞靠梢灾苯虞敵?/p>
echo$key1.$key2.$key3;
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。