php數(shù)組的定義
數(shù)組在之前我們讓大家記住兩個(gè)觀點(diǎn):
1.數(shù)組可以存入多個(gè)不同類(lèi)型的數(shù)據(jù),是一個(gè)復(fù)合數(shù)據(jù)類(lèi)型。
2.數(shù)組的英文是array,學(xué)一了一下最簡(jiǎn)單的數(shù)組聲明。
那我們來(lái)進(jìn)行簡(jiǎn)單的回顧:
<?php $shu = array(1 , 1.5 , true ,'天王蓋地虎,小雞燉蘑菇'); echo '<pre>'; var_dump($shu); echo '</pre>'; ?>
在上例中,我們發(fā)現(xiàn)我們存入了:
1.整型
2.浮點(diǎn)
3.布爾
4.字符串
注:上例中echo pre這個(gè)標(biāo)簽的主要目的是為原樣輸出,格式展示的更好看,更清晰。
我們用var_dump()打印出來(lái)顯示看一下效果:
我們仔細(xì)觀察一下上面的這張圖,你會(huì)發(fā)現(xiàn)以下幾個(gè)特點(diǎn):
1.array(size = 4) 說(shuō)明里面有4個(gè)元素
2.0 => int 1 我們知道int是整型的意思,1是一個(gè)整型的數(shù)值。那前面的0,1,2,3和=>代表什么意思呢?
3.最新前的0,1,2,3代表的是值的讀取標(biāo)識(shí)號(hào),我們稱(chēng)之為下標(biāo)或者鍵(英文:key)
4.=> 是一個(gè)符號(hào)標(biāo)準(zhǔn)叫法叫作:鍵值對(duì)應(yīng)符。因此,以后再看到 0=> int 1 可以這樣來(lái)說(shuō)。 下標(biāo)訪(fǎng)問(wèn)符0對(duì)應(yīng)整型的1。
5.我們還稱(chēng)數(shù)組里面的鍵值對(duì)為元素,元素就是鍵值對(duì)的組合。
哦耶! 數(shù)組好像還挺好學(xué)的,全是一些規(guī)律喲。
我們通過(guò)上例,其實(shí)你一不小心的就完成了數(shù)組其中的一種聲明方式:索引數(shù)組的聲明喲。
所謂索引數(shù)組:就是下標(biāo)全為整型的數(shù)組。
索引數(shù)組的下標(biāo)必須要從0開(kāi)始嗎?
答:這個(gè)問(wèn)題其實(shí)不然,索引數(shù)組并不一定要從0開(kāi)始。
那如何能夠不從0開(kāi)始呢?
答:需要用到大家在上面學(xué)的一小塊知識(shí)喲。就是鍵值對(duì)應(yīng)符。我們來(lái)動(dòng)手寫(xiě)寫(xiě)。
<?php $kele = array('只有不斷努力才能博得未來(lái)',10 => 'NoAlike', 'PHP中文網(wǎng)' , '去PHP中文網(wǎng)學(xué)PHP', 19 => '鳳姐和芙蓉我都愛(ài)' , '楊冪我最?lèi)?ài)'); //打印顯示$kele echo '<pre>'; var_dump($kele); echo '</pre>'; ?>
上例中,我們一不小心就寫(xiě)了一個(gè)索引數(shù)組。不過(guò)索引數(shù)組的下標(biāo)不是從0 開(kāi)始的,而是從10開(kāi)始的。
不過(guò)上面的例子中,我們覺(jué)得寫(xiě)的不優(yōu)美,我們可以將代碼寫(xiě)的更加優(yōu)美一些,格式更加清晰一些。
<?php $kele = array( '只有不斷努力才能博得未來(lái)', 10 => 'NoAlike', 'PHP中文網(wǎng)' , '去PHP中文網(wǎng)學(xué)PHP', 19 => '鳳姐和芙蓉我都愛(ài)' , '楊冪我最?lèi)?ài)' ); //打印顯示$kele echo '<pre>'; var_dump($kele); echo '</pre>'; ?>
這樣是不是看得更清楚,一行對(duì)應(yīng)一個(gè)數(shù)組的值。
我們執(zhí)行一下代碼,看一下效果:
通過(guò)上面的效果,我們來(lái)總結(jié)規(guī)律:
1.索引數(shù)組若不強(qiáng)制聲明他的下標(biāo),他的下標(biāo)是從0開(kāi)始的。(我們的第一個(gè)數(shù)組的值:只有不斷努力才能博得未來(lái)。這個(gè)值的下標(biāo)為0)。
2.如果我指定過(guò)下標(biāo)他的下標(biāo)就為我指定的值。如下標(biāo)為10和下標(biāo)為19的,都是我指定過(guò)的值。
3.若某個(gè)值(如NoAlike),強(qiáng)制指定了下標(biāo)(下標(biāo)為10)。在它后面加上的值(PHP中文網(wǎng)),不指定下標(biāo)的話(huà)。他們的下標(biāo)增長(zhǎng)規(guī)律為最大值+1。
例如:鳳姐和芙蓉我都愛(ài)的下標(biāo)為19.我在后面加上了:楊冪我最?lèi)?ài)。它的下標(biāo)自動(dòng)增長(zhǎng)為了11。
不知不覺(jué),你已經(jīng)學(xué)會(huì)了索引數(shù)組的創(chuàng)建,神奇吧?真為你感到高興!
向索引數(shù)組中增加元素
學(xué)習(xí)完了索引數(shù)組的創(chuàng)建,接下來(lái)我們學(xué)習(xí)索引數(shù)組的增加、修改和刪除。
<?php $minren = array( '楊冪', '王珞丹', '劉亦菲', '黃圣依' ); //如何向這$minren這個(gè)數(shù)組中增加元素呢 //猜猜范冰冰的下標(biāo)是多少? $minren[] = '范冰冰'; $minren[100] = '范爺'; //它的下標(biāo)又為幾呢? $minren[] = '李晨'; ?>
總結(jié):
1.向索引數(shù)組中增加元素用: 數(shù)組變量名[]、數(shù)組變量名[鍵值]這兩種方式來(lái)增加元素
2.鍵值的增長(zhǎng)規(guī)則與之前的規(guī)則一樣。都是最大值加1的原則。
向索引數(shù)組中刪除元素
我們還拿剛剛的數(shù)組來(lái)舉例:
<?php $minren = array( '楊冪', '王珞丹', '劉亦菲', '黃圣依', '范冰冰' ); //假設(shè)我不喜歡:黃圣依,如何將黃圣依給刪掉掉呢? //如果刪除掉后范冰冰的下標(biāo)為多少呢? //如果在后面再追加一個(gè)元素,會(huì)填掉:“黃圣依”留下來(lái)的空嗎? unset($minren[3]); $minren[] = '金星'; echo '<pre>'; var_dump($minren); echo '</pre>'; ?>
看看效果:
1.使用unset刪除變量的方式來(lái)刪除數(shù)組里面的值。
2.刪除了中間的值,并不會(huì)讓后面的下標(biāo)向前自動(dòng)移動(dòng)。而是原來(lái)的值為多少就為多少
3.刪除掉其中的某個(gè)值,新加入的值不會(huì)替換掉原來(lái)的位置,依然遵循最大值加1的原則。
修改值
我們學(xué)習(xí)最簡(jiǎn)單的創(chuàng)造、增加和刪除。我相信大家一定能夠推理出如何修改值了。
<?php $minren = array( '楊冪', '王珞丹', '劉亦菲', '黃圣依', '范冰冰' ); $minren[5] = '范爺'; $minren[2] = '亦菲,不要嫁給韓國(guó)人好嗎?'; echo '<pre>'; var_dump($minren); echo '</pre>'; ?>
執(zhí)行上面的代碼,輸出看看結(jié)果。
1.用變量名[鍵] = 新值。就把數(shù)組中的值定的值修改了。
索引數(shù)組的其他聲明方式
通過(guò)上面的例子,我們學(xué)習(xí)到了數(shù)組的聲明。我們來(lái)學(xué)一下數(shù)組的其他聲明方式。
一、直接用之前未聲明的變量,用變量名后面接中括號(hào)的方式聲明數(shù)組。
<?php //直接寫(xiě)一個(gè)變量后面加上中括號(hào),聲明變量 $qi[] = '可口可樂(lè)'; $qi[10] ='百事可樂(lè)'; echo '<pre>'; var_dump($qi); echo '</pre>'; ?>
二、每次用array()寫(xiě)的太麻煩了,還可以不用寫(xiě)array喲,更簡(jiǎn)單。
<?php $minren = [ '楊冪', '王珞丹', 100 => '劉亦菲', '黃圣依', '范冰冰' ]; echo '<pre>'; var_dump($minren); echo '</pre>'; ?>
上面是另外兩種寫(xiě)法。當(dāng)然,你自己喜歡使用哪一種就使用哪一種來(lái)聲明。
關(guān)聯(lián)數(shù)組
索引數(shù)組適當(dāng)?shù)淖円幌滦尉统霈F(xiàn)了關(guān)聯(lián)數(shù)組。只要數(shù)組里面有一個(gè)為字符串的數(shù)組,就為關(guān)聯(lián)數(shù)組。
通過(guò)上例中,我們發(fā)現(xiàn)數(shù)組的下標(biāo)只能夠?yàn)樽址?,?dāng)然不能夠滿(mǎn)足我的需求。
假設(shè)我想聲明一個(gè)下標(biāo)為帥對(duì)應(yīng)陳奕迅這個(gè)值??隙ú荒軡M(mǎn)足我的需求。
那我們來(lái)聲明一下關(guān)聯(lián)數(shù)組。跟索引數(shù)組的聲明方式完成一樣。不過(guò)不同的是,必須要指定字符串的下標(biāo)和必須要使用鍵值對(duì)應(yīng)符。
<?php //聲明一下關(guān)聯(lián)數(shù)組 $rela = array( '帥' => '陳奕迅', '很帥' => '黃曉明', '灰?;页?#39; => '寧澤濤', '有男人味的大叔' => '吳秀波', ); //再來(lái)玩玩簡(jiǎn)潔聲明 $drink = [ '美' => '鳳姐', '很美' => '芙蓉姐姐', 'verymei' => '楊冪', '心中滴女神呀' => '華妃', 100 => '孫儷', '娘娘', ]; // 輸出 $rela echo '<pre>'; var_dump($rela); echo '</pre>'; // 輸出$drink echo '<pre>'; var_dump($drink); echo '</pre>'; ?>
我們來(lái)實(shí)驗(yàn)一下看看最終的結(jié)果是什么樣的:
我們通過(guò)實(shí)驗(yàn)知道:
1.聲明關(guān)聯(lián)數(shù)組是 鍵名 => 值
2.在關(guān)聯(lián)數(shù)組可以有索引數(shù)組的元素
3.關(guān)聯(lián)數(shù)組中的索引數(shù)組的元素后再聲明了無(wú)下標(biāo)的元素,依然是最大值+1原則。(觀察上圖中的值為孫儷、娘娘的兩個(gè)元素)。
關(guān)聯(lián)數(shù)組的增、刪、改
<?php $drink = [ '美' => '鳳姐', '很美' => '芙蓉姐姐', 'verymei' => '王濤', '心中滴女神呀' => '楊瀾', 100 => '孫儷', '娘娘', ]; //追加方式與索引數(shù)組是一樣的 $drink['ynj'] = '伊能靜'; //輸出試試 echo '<pre>'; var_dump($drink); echo '</pre>'; //刪除一個(gè)試試 unset($drink['verymei']); echo '<pre>'; var_dump($drink); echo '</pre>'; //將芙蓉姐姐 改成:心里美才是真的美 $drink['很美'] = '心里美才是真的美'; echo '<pre>'; var_dump($drink); echo '</pre>'; ?>
你動(dòng)手做做剛剛的實(shí)驗(yàn),你會(huì)發(fā)現(xiàn)操作方式與索引的操作方式一樣。只不過(guò)下標(biāo)在讀取有點(diǎn)不一樣罷了。
其他的關(guān)聯(lián)數(shù)組聲明方式
<?php $drink['nf'] = '農(nóng)夫山泉'; $cocacola = '可口可樂(lè)'; //當(dāng)然可以是變量喲 $drink['kl'] = $cocacola; $data = array( 'kl' => $cocacola, ); echo '<pre>'; var_dump($drink); echo '</pre>'; ?>
通過(guò)上例我們發(fā)現(xiàn),在關(guān)聯(lián)數(shù)組當(dāng)中也是可以不用array,直接在變量后面接括號(hào)。括號(hào)里面插入字符串下標(biāo),一樣也聲明成功。
后面插入變量的例子,只不過(guò)把字符串變成了變量,當(dāng)然沒(méi)有問(wèn)題。
數(shù)組當(dāng)中插入數(shù)組
數(shù)組可以插入整型、浮點(diǎn)、字符串,那么數(shù)組當(dāng)中可不可以插入數(shù)組呢?
當(dāng)然可以。
在學(xué)習(xí)數(shù)組的時(shí)候,我們定義了這樣一組名詞。
1.一維數(shù)組 數(shù)組里面沒(méi)有其他數(shù)組,只有單純的一些變量或者值。
2.二維數(shù)組 數(shù)組里面插入了單層的一個(gè)數(shù)組,或者多個(gè)數(shù)組
3.三維數(shù)組 在數(shù)組(A)里面插入了一個(gè)數(shù)組(B),在B數(shù)組里面又插入了一層級(jí)的數(shù)組(C),這種我們就稱(chēng)為三維數(shù)組
4.超過(guò)三維的,統(tǒng)統(tǒng)都叫多維數(shù)組。
注:索引數(shù)組和關(guān)聯(lián)數(shù)組當(dāng)中都可以再插入其他數(shù)組,讓數(shù)組變?yōu)槎嗑S的。
我們來(lái)聲明一個(gè)一維數(shù)組,只有一個(gè)維度。索引、關(guān)聯(lián)均可,這個(gè)操作大家都很熟。
<?php //一維的索引數(shù)組 $data = [1 , 2 , 3 , 4 , 10 => 250]; //一維的關(guān)聯(lián)數(shù)組 $rela = [ 'beijing' => '北京', 'shanghai' => '上海', 'tj' => '天津', ]; echo '<pre>'; var_dump($rela); echo '</pre>'; echo '<pre>'; var_dump($data); echo '</pre>'; ?>
一維數(shù)組大家很熟悉,也不難,就是聲明數(shù)組嘛。二維也不難,只是在數(shù)組里面再插一個(gè)或多個(gè)數(shù)組。二維學(xué)好了,多維就學(xué)好了。
<?php $person = array( 'office' => '辦公室', //注意:插入第一個(gè)數(shù)組喲 'family' => array( '爸爸', '媽媽', 'yeye' => '爺爺', 'nn' => '奶奶', ), //注意:又插入了一個(gè)平級(jí)的數(shù)組 'jiaotong' => array( '自行車(chē)', '摩托車(chē)', '汽車(chē)', '飛機(jī)', ), ); echo '<pre>'; var_dump($person); echo '</pre>'; ?>
我們執(zhí)行一下看看效果:
我們發(fā)現(xiàn)變量person 是一個(gè)數(shù)組類(lèi)型。有三個(gè)元素(size=3)。
第一個(gè)元素為 office 對(duì)應(yīng)的是一個(gè)字符串“辦公室”,
第二個(gè)元素為family 里面是一個(gè)數(shù)組,這個(gè)數(shù)組又有4個(gè)元素,值分別為:爸爸、媽媽、爺爺、奶奶。
第三個(gè)元素為jiaotong,里面也為一個(gè)數(shù)組有4個(gè)元素,值分別為:自行車(chē)、摩托車(chē)、汽車(chē)、飛機(jī)。
好了,二維好聲明,只要把格式寫(xiě)對(duì)了,確定是在一個(gè)數(shù)組里面再插入一個(gè)數(shù)組就好。
那如何訪(fǎng)問(wèn):爺爺和爸爸這兩個(gè)值呢?
<?php $person = [ 'office' => '辦公室', //注意:插入第一個(gè)數(shù)組喲 'family' => [ '爸爸', '媽媽', 'yeye' => '爺爺', 'nn' => '奶奶', ], //注意:又插入了一個(gè)平級(jí)的數(shù)組 'jiaotong' => [ '自行車(chē)', '摩托車(chē)', '汽車(chē)', '飛機(jī)', ], ]; //訪(fǎng)問(wèn)“爸爸”這什值 echo $person['family'][0]; echo '<br />-----華麗麗的分割線(xiàn)------<br />'; //訪(fǎng)問(wèn)“爺爺”這什值 echo $person['family']['yeye']; echo '<br />-----華麗麗的分割線(xiàn)------<br />'; //訪(fǎng)問(wèn)“汽車(chē)”這什值 echo $person['jiaotong'][2]; ?>
我們看看結(jié)果如下:
上例大家會(huì)發(fā)現(xiàn),訪(fǎng)問(wèn)二維數(shù)組不過(guò)是按照之前的下標(biāo)讀取方式依次向下讀取即可。
先寫(xiě)上變量,中括號(hào)寫(xiě)上family這個(gè)下標(biāo),再寫(xiě)上要訪(fǎng)問(wèn)元素的下標(biāo)。
三維數(shù)組我們說(shuō)了概念,那我們直接上手實(shí)驗(yàn)看看效果:
<?php $area = array( 'china' => array( '上海', '湖北', '天津', '北京' => array( 'hd' => '海淀', '朝陽(yáng)', '房山', 'cp' => '昌平', ), '廣東' => array( '深圳', '廣州', '佛山', 'dg' => '東莞', ), ), 'usa' => array( '華盛頓', '舊金山', '紐約' => array( '曼哈頓區(qū)', '皇后區(qū)', '布魯克林區(qū)', ), ), ); echo '<pre>'; var_dump($area); echo '</pre>'; ?>
我們執(zhí)行一下看看效果:
說(shuō)明:
在變量$area下有二個(gè)數(shù)組,一個(gè)為china,一個(gè)為usa。
在china這個(gè)數(shù)組里面插入了上海、湖北、天津,又插入了北京和廣東。而北京和廣東又是一個(gè)數(shù)組。在北京和廣東這兩個(gè)數(shù)組里面分別有不同的元素。
在這usa 這個(gè)數(shù)組里面插美國(guó)的華盛頓、舊金山和紐約。而紐約下面又是一個(gè)數(shù)組,說(shuō)明了紐約下面的幾個(gè)區(qū)。
所以說(shuō),三維數(shù)組就是在數(shù)組里面再插入一個(gè)數(shù)組(A),在A數(shù)組里面插入一個(gè)數(shù)組。
我們接下來(lái)看看,如何來(lái)讀取里面的值。
<?php $area = array( 'china' => array( '上海', '湖北', '天津', '北京' => array( 'hd' => '海淀', '朝陽(yáng)', '房山', 'cp' => '昌平', ), '廣東' => array( '深圳', '廣州', '佛山', 'dg' => '東莞', ), ), 'usa' => array( '華盛頓', '舊金山', '紐約' => array( '曼哈頓區(qū)', '皇后區(qū)', '布魯克林區(qū)', ), ), ); //讀取華盛頓 echo $area['usa']['0']; //讀?。翰剪斂肆?echo $area['usa']['紐約'][2]; //讀?。翰?echo $area['china']['北京']['cp']; //修改cp下標(biāo)的值改為:西城區(qū) $area['china']['北京']['cp'] = '西城區(qū)'; //輸出看看原來(lái)昌平的值是否發(fā)生了變化 echo $area['china']['北京']['cp']; ?>
通過(guò)上面我們發(fā)現(xiàn)數(shù)組學(xué)習(xí)起來(lái)不難。
學(xué)習(xí)多維數(shù)組的難點(diǎn):
注意格式,將每個(gè)維度的換行、縮進(jìn)弄整齊。就不容易出錯(cuò)了。
【切記】
數(shù)組元素間的分割符為逗號(hào),在數(shù)組中插入數(shù)組的時(shí)候,不要在結(jié)尾處寫(xiě)成了分號(hào)(;)