陣列在之前我們讓大家記住兩個觀點:
1.陣列可以存入多個不同類型的數據,是一個複合資料型別。
2.陣列的英文是array,學了一了最簡單的陣列宣告。
那我們來進行簡單的回顧:
<?php $shu = array(1 , 1.5 , true ,'天王盖地虎,小鸡炖蘑菇'); echo '<pre>'; var_dump($shu); echo '</pre>'; ?>
在上例中,我們發現我們存入了:
1.整數
# 2 .浮點
3.布林
4.字串
註:上例中echo pre這個標籤的主要目的是為原樣輸出,格式顯示的較好看,更清晰。
我們用var_dump()列印出來顯示看看效果:
我們仔細觀察上面的這張圖,你會發現以下幾個特點:
1.array(size = 4) 說明裡面有4個元素
2.0 => int 1 我們知道int是整數的意思,1是整數的數值。那前面的0,1,2,3和=>代表什麼意思呢?
3.最新前的0,1,2,3代表的是值的讀取標識號,我們稱為下標或鍵(英文:key)
4.= > 是一個符號標準叫法叫作:鍵值對應符。因此,以後再看到 0=> int 1 可以這樣來說。 下標訪問符0對應整型的1。
5.我們也稱數組裡面的鍵值對為元素,而元素就是鍵值對的組合。
喔耶! 陣列好像還挺好學的,全是一些規律喲。
我們透過上例,其實你一不小心的就完成了數組其中的一種宣告方式:索引數組的宣告喲。
所謂索引陣列:就是下標全為整數的陣列。
索引陣列的下標必須從0開始嗎?
答:這個問題其實不然,索引陣列不一定要從0開始。
那如何能夠不從0開始呢?
答:需要用到大家在上面學的一小塊知識喲。就是鍵值對應符。我們來動手寫寫。
<?php $kele = array('只有不断努力才能博得未来',10 => 'NoAlike', 'PHP中文网' , '去PHP中文网学PHP', 19 => '凤姐和芙蓉我都爱' , '杨幂我最爱'); //打印显示$kele echo '<pre>'; var_dump($kele); echo '</pre>'; ?>
上例中,我們一不小心就寫了一個索引數組。不過索引數組的下標不是從0 開始的,而是從10開始的。
不過上面的例子中,我們覺得寫的不優美,我們可以將程式碼寫的更加優美一些,格式更加清晰一些。
<?php $kele = array( '只有不断努力才能博得未来', 10 => 'NoAlike', 'PHP中文网' , '去PHP中文网学PHP', 19 => '凤姐和芙蓉我都爱' , '杨幂我最爱' ); //打印显示$kele echo '<pre>'; var_dump($kele); echo '</pre>'; ?>
這樣是不是看得更清楚,一行對應一個陣列的值。
我們執行一下程式碼,看看效果:
透過上面的效果,我們來總結規律:
1.索引數組若不強制聲明他的下標,他的下標是從0開始的。 (我們的第一個陣列的值:只有不斷努力才能博得未來。這個值的下標為0)。
2.如果我指定過下標他的下標就為我指定的值。如下標示為10和下標為19的,都是我指定過的值。
3.若某個值(如NoAlike),強制指定了下標(下標為10)。在它後面加上的值(PHP中文網),不指定下標的話。他們的下標成長規律為最大值+1。
例如:鳳姐和芙蓉我都愛的下標為19.我在後面加上了:楊冪我最愛。它的下標自動增長為了11。
不知不覺,你已經學會了索引數組的創建,神奇吧?真為你感到高興!
在索引數組中增加元素
學習完成了索引數組的創建,接下來我們學習索引數組的增加、修改和刪除。
<?php $minren = array( '杨幂', '王珞丹', '刘亦菲', '黄圣依' ); //如何向这$minren这个数组中增加元素呢 //猜猜范冰冰的下标是多少? $minren[] = '范冰冰'; $minren[100] = '范爷'; //它的下标又为几呢? $minren[] = '李晨'; ?>
總結:
1.增加元素在索引數組中: 陣列變數名稱[]、陣列變數名稱[鍵值]這兩種方式來增加元素
2.鍵值的成長規則與先前的規則相同。都是最大值加1的原則。
在索引數組中刪除元素
#我們還拿剛剛的陣列來舉例:
<?php $minren = array( '杨幂', '王珞丹', '刘亦菲', '黄圣依', '范冰冰' ); //假设我不喜欢:黄圣依,如何将黄圣依给删掉掉呢? //如果删除掉后范冰冰的下标为多少呢? //如果在后面再追加一个元素,会填掉:“黄圣依”留下来的空吗? unset($minren[3]); $minren[] = '金星'; echo '<pre>'; var_dump($minren); echo '</pre>'; ?>
看看效果:
1.使用unset刪除變數的方式來刪除陣列裡面的值。
2.刪除了中間的數值,並不會讓後面的下標向前自動移動。而是原來的值為多少就為多少
3.刪除其中的某個數值,新加入的數值不會取代原來的位置,仍遵循最大值加1的原則。
修改值
我們學習最簡單的創造、增加和刪除。我相信大家一定能夠推理出如何修改數值了。
<?php $minren = array( '杨幂', '王珞丹', '刘亦菲', '黄圣依', '范冰冰' ); $minren[5] = '范爷'; $minren[2] = '亦菲,不要嫁给韩国人好吗?'; echo '<pre>'; var_dump($minren); echo '</pre>'; ?>
執行上面的程式碼,輸出看看結果。
1.用變數名[鍵] = 新值。就把數組中的值定的值修改了。
索引陣列的其他宣告方式
#透過上面的例子,我們學習到了陣列的宣告。我們來學一下數組的其他聲明方式。
一、直接用之前未宣告的變量,用變數名稱後面接中括號的方式宣告數組。
<?php //直接写一个变量后面加上中括号,声明变量 $qi[] = '可口可乐'; $qi[10] ='百事可乐'; echo '<pre>'; var_dump($qi); echo '</pre>'; ?>
二、每次用array()寫的太麻煩了,還可以不用寫array喲,更簡單。
<?php $minren = [ '杨幂', '王珞丹', 100 => '刘亦菲', '黄圣依', '范冰冰' ]; echo '<pre>'; var_dump($minren); echo '</pre>'; ?>
上面是另外兩種寫法。當然,你自己喜歡用哪一種就用哪一種來宣告。
關聯陣列
#索引數組適當的變一下形就出現了關聯數組。只要數組裡面有一個為字串的數組,就為關聯數組。
透過上例中,我們發現陣列的下標只能夠為字串,當然無法滿足我的需求。
假設我想宣告一個下標為帥對應陳奕迅這個值。肯定不能滿足我的需求。
那我們來宣告關聯數組。跟索引數組的聲明方式完成一樣。不過不同的是,必須要指定字串的下標和必須要使用鍵值對應符。
<?php //声明一下关联数组 $rela = array( '帅' => '陈奕迅', '很帅' => '黄晓明', '灰常灰常帅' => '宁泽涛', '有男人味的大叔' => '吴秀波', ); //再来玩玩简洁声明 $drink = [ '美' => '凤姐', '很美' => '芙蓉姐姐', 'verymei' => '杨幂', '心中滴女神呀' => '华妃', 100 => '孙俪', '娘娘', ]; // 输出 $rela echo '<pre>'; var_dump($rela); echo '</pre>'; // 输出$drink echo '<pre>'; var_dump($drink); echo '</pre>'; ?>
我們來實驗一下看看最終的結果是什麼樣的:
我們透過實驗知道:
1.聲明關聯數組是鍵名=> 值
2.在關聯數組可以有索引數組的元素
3.關聯數組中的索引數組的元素後聲明了無下標的元素,仍是最大值+1原則。 (觀察上圖的值為孫儷、娘娘的兩個元素)。
關聯陣列的增、刪、改
<?php $drink = [ '美' => '凤姐', '很美' => '芙蓉姐姐', 'verymei' => '王涛', '心中滴女神呀' => '杨澜', 100 => '孙俪', '娘娘', ]; //追加方式与索引数组是一样的 $drink['ynj'] = '伊能静'; //输出试试 echo '<pre>'; var_dump($drink); echo '</pre>'; //删除一个试试 unset($drink['verymei']); echo '<pre>'; var_dump($drink); echo '</pre>'; //将芙蓉姐姐 改成:心里美才是真的美 $drink['很美'] = '心里美才是真的美'; echo '<pre>'; var_dump($drink); echo '</pre>'; ?>
你動手做剛剛的實驗,你會發現操作方式與索引的操作方式一樣。只不過下標在讀取有點不一樣罷了。
其他的關聯數組宣告方式
<?php $drink['nf'] = '农夫山泉'; $cocacola = '可口可乐'; //当然可以是变量哟 $drink['kl'] = $cocacola; $data = array( 'kl' => $cocacola, ); echo '<pre>'; var_dump($drink); echo '</pre>'; ?>
透過上例我們發現,在關聯數組當中也是可以不用array,直接在變數後面接括號。括號裡面插入字串下標,一樣也宣告成功。
後面插入變數的例子,只不過把字串變成了變量,當然也沒有問題。
數組當中插入數組
數組可以插入整數、浮點、字串,那麼數組當中可不可以插入數組呢?
當然可以。
在學習陣列的時候,我們定義了這樣一組名詞。
1.一維數組 數組裡面沒有其他數組,只有單純的一些變數或值。
2.二維數組數組裡面插入了單層的一個數組,或者多個數組
3.三維數組在數組(A)裡面插入了一個數組(B),在B數組裡面又插入了一層樓的陣列(C),這種我們就稱為三維數組
4.超過三維的,統統叫多維數組。
註:索引數組和關聯數組當中都可以再插入其他數組,讓數組變成多維的。
我們來宣告一個一維陣列,只有一個維度。索引、關聯均可,這個操作大家都很熟。
<?php //一维的索引数组 $data = [1 , 2 , 3 , 4 , 10 => 250]; //一维的关联数组 $rela = [ 'beijing' => '北京', 'shanghai' => '上海', 'tj' => '天津', ]; echo '<pre>'; var_dump($rela); echo '</pre>'; echo '<pre>'; var_dump($data); echo '</pre>'; ?>
一維數組大家很熟悉,也不難,就是宣告數組嘛。二維也不難,只是在數組裡面再插一個或多個數組。二維學好了,多維就學好了。
<?php $person = array( 'office' => '办公室', //注意:插入第一个数组哟 'family' => array( '爸爸', '妈妈', 'yeye' => '爷爷', 'nn' => '奶奶', ), //注意:又插入了一个平级的数组 'jiaotong' => array( '自行车', '摩托车', '汽车', '飞机', ), ); echo '<pre>'; var_dump($person); echo '</pre>'; ?>
我們執行一下看看效果:
我們發現變數person 是一個陣列類型。有三個元素(size=3)。
第一個元素為office 對應的是一個字串“辦公室”,
第二個元素為family 裡面是一個陣列,這個陣列又有4個元素,數值分別為:爸爸、媽媽、爺爺、奶奶。
第三個元素為jiaotong,裡面也為一個陣列有4個元素,數值分別為:自行車、摩托車、汽車、飛機。
好了,二維好聲明,只要把格式寫對了,確定是在一個陣列裡面再插入一個陣列就好。
那要如何訪問:爺爺和爸爸這兩個數值呢?
<?php $person = [ 'office' => '办公室', //注意:插入第一个数组哟 'family' => [ '爸爸', '妈妈', 'yeye' => '爷爷', 'nn' => '奶奶', ], //注意:又插入了一个平级的数组 'jiaotong' => [ '自行车', '摩托车', '汽车', '飞机', ], ]; //访问“爸爸”这什值 echo $person['family'][0]; echo '<br />-----华丽丽的分割线------<br />'; //访问“爷爷”这什值 echo $person['family']['yeye']; echo '<br />-----华丽丽的分割线------<br />'; //访问“汽车”这什值 echo $person['jiaotong'][2]; ?>
我們看看結果如下:
上例大家會發現,存取二維陣列不過是依照先前的下標讀取方式依序向下讀取即可。
先寫上變量,將括號寫上family這個下標,再寫上要存取元素的下標。
三維陣列我們說了概念,那我們直接上手實驗看看效果:
<?php $area = array( 'china' => array( '上海', '湖北', '天津', '北京' => array( 'hd' => '海淀', '朝阳', '房山', 'cp' => '昌平', ), '广东' => array( '深圳', '广州', '佛山', 'dg' => '东莞', ), ), 'usa' => array( '华盛顿', '旧金山', '纽约' => array( '曼哈顿区', '皇后区', '布鲁克林区', ), ), ); echo '<pre>'; var_dump($area); echo '</pre>'; ?>
我們執行一下看看效果:
說明:
在變數$area下有二個數組,一個為china,一個為usa。
在china這個陣列裡面插入了上海、湖北、天津,又插入了北京和廣東。而北京和廣東又是一個陣列。在北京和廣東這兩個數組裡面分別有不同的元素。
在這usa 這個陣列裡面插美國的華盛頓、舊金山和紐約。而紐約下面又是一個數組,說明了紐約下面的幾個區。
所以說,三維數組就是在數組裡面再插入一個數組(A),在A數組裡面插入一個數組。
我們接下來看看,如何來讀取裡面的值。
<?php $area = array( 'china' => array( '上海', '湖北', '天津', '北京' => array( 'hd' => '海淀', '朝阳', '房山', 'cp' => '昌平', ), '广东' => array( '深圳', '广州', '佛山', 'dg' => '东莞', ), ), 'usa' => array( '华盛顿', '旧金山', '纽约' => array( '曼哈顿区', '皇后区', '布鲁克林区', ), ), ); //读取华盛顿 echo $area['usa']['0']; //读取:布鲁克林 echo $area['usa']['纽约'][2]; //读取:昌平 echo $area['china']['北京']['cp']; //修改cp下标的值改为:西城区 $area['china']['北京']['cp'] = '西城区'; //输出看看原来昌平的值是否发生了变化 echo $area['china']['北京']['cp']; ?>
透過上面我們發現陣列學習起來不難。
學習多維數組的困難點:
注意格式,將每個維度的換行、縮排弄整齊。就不容易出錯了。
【切記】
數組元素間的分割符為逗號,在數組中插入數組的時候,不要在結尾處寫成了分號(;)