數組在之前我們讓大家記住兩個觀點:
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學院的寫法。當然,你自己喜歡使用哪一種就使用哪一種來聲明。
###關聯數組
索引數組適當的變一下形就出現了關聯數組。只要數組里面有一個為字符串的數組,就為關聯數組。
通過上例中,我們發現數組的下標只能夠為字符串,當然不能夠滿足我的需求。
假設我想聲明一個下標為帥對應李文凱這個值。肯定不能滿足我的需求。
那我們來聲明一下關聯數組。跟索引數組的聲明方式完成一樣。不過不同的是,必須要指定字符串的下標和必須要使用鍵值對應符。
~~~
<?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['kx'] = '康熙';
//輸出試試
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學院了。
####其他的關聯數組聲明方式
~~~
<?php
$drink['nf'] = '農夫山泉';
$cocacola = '可口可樂';
//當然可以是變量喲
$drink['kl'] = $cocacola;
$data = array(
'kl' => $cocacola,
);
?>
~~~
通過上例我們發現,在關聯數組當中也是可以不用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'];
?>
~~~
通過上面我們發現數組學習起來不難。
* * * * *
學習多維數組的難點:
注意格式,將每個維度的換行、縮進弄整齊。就不容易出錯了。
【切記】
數組元素間的分割符為逗號,在數組中插入數組的時候,不要在結尾處寫成了分號(;)
下圖是錯誤的載圖展示:

- 01. 為什么選擇本書學習PHP
- 1.1 為什么學習PHP?
- 1.2 PHP是什么
- 1.3 零基礎也能學習
- 1.4 為什么有些人學不會
- 02.PHP的環境安裝
- 2.1開發環境是什么?
- 2.2 windows環境安裝
- 2.3 Linux環境安裝
- 2.4 其他開發環境
- 2.5 寫代碼的工具選擇
- 03. PHP基本語法
- 3.1 PHP基本語法
- 3.1.1 寫出你的第一段PHP代碼
- 3.1.2 讀過初中你就會變量
- 3.1.3 echo 顯示命令
- 3.1.4 注釋的功能很強大
- 3.2 數據類型并不神秘
- 3.2.1 整型就是整數
- 3.2.2 布爾就是易經的知識
- 3.2.3 字符串
- 3.2.4 浮點型
- 3.2.5 重要:if和else語法
- 3.2.6 NULL類型
- 3.2.7對象以后會學
- 3.2.8 數組會有單純的一個章節
- 3.2.9 資源類型
- 3.2.10 眼前了解回調類型即可
- 3.2.11 查看和判斷數據類型
- 3.2.12 數據類型的自動轉換和強制轉換
- 3.3 常量和變量
- 3.3.1 用常量限制用戶跳過某些文件
- 3.3.2 可變變量
- 3.3.3 外部變量
- 3.3.4 環境變量
- 3.3.5 變量引用
- 3.4 PHP表達式與運算符
- 3.4.1 算術運算
- 3.4.2 賦值運算
- 3.4.3 自加、自減運算
- 3.4.4 比較運算
- 3.4.5 邏輯運算
- 3.4.6 位運算
- 3.4.7 運算符優先級
- 3.4.8 三元運算符和其它運算符
- 04. PHP中的流程控制
- 4.1 if條件結構流程
- 4.1.1 if語句
- 4.1.2 嵌套if...else...elseif結構
- 4.1.3 if語句多種嵌套
- 4.2 分支結構switch語句的使用
- 4.3 循環語句的使用
- 4.3.1 while循環
- 4.3.2 do...while循環的區別
- 4.3.3 for循環控制語句
- 4.3.4 goto語法
- 4.3.5 declare 語法
- 05.PHP的函數基本語法
- 5.1 自定義函數
- 5.2 自定義函數高級調用
- 5.2.1 回調函數
- 5.2.2 變量函數
- 5.2.3 匿名函數
- 5.2.4 內部函數
- 5.2.5 變量作用域
- 5.2.6 參數的引用
- 5.2.7 遞歸函數
- 5.2.8 靜態變量
- 5.3 使用系統內置函數
- 5.4 文件包含函數
- 5.5 數學常用函數
- 5.6 日期常用函數
- 5.6.1 獲取時期時間信息函數
- 5.6.2 日期驗證函數
- 5.6.3 獲取本地化時間戳函數
- 5.6.4 程序執行時間檢測
- 5.7 字符串常用函數
- 06.PHP數組與數據結構
- 6.1 數組的定義
- 6.2 數組的操作
- 6.2.1 數組的計算
- 6.2.2 for循環遍歷索引數組
- 6.2.3 foreach遍歷關聯數組
- 6.2.4 list、each函數遍歷數組
- 6.2.5 常用操作數組函數
- 6.3 數組的常用函數
- 07. PHP中的正則達達式
- 7.1 正則表達示的定界符
- 7.2 正則表達示中的原子
- 7.3 正則表示中的元字符
- 7.4 正則達達示中的模式修正符
- 7.5 寫正則的訣竅和常用正則
- 7.6 用正則寫一個UBB文本編輯器
- 08.文件系統
- 8.1 讀取文件
- 8.2 創建和修改文件內容
- 8.3 創建臨時文件
- 8.4 移動、拷貝和刪除文件
- 8.5 檢測文件屬性函數
- 8.6 文件常用函數和常量
- 8.7 文件鎖處機制
- 8.8 目錄處理函數
- 8.9 文件權限設置
- 8.10文件路徑函數
- 8.11 小小文件留言本
- 8.12 修改配置文件的實例
- 09.PHP文件上傳
- 9.1 文件上傳需要注意php.ini文件
- 9.2 文件上傳的步驟
- 9.3 文件上傳表單注意事項
- 9.4 按照數組和步驟完成文件上傳
- 9.5 多文件上傳
- 9.6 文件上傳進度處理
- 10.PHP圖像處理
- 10.1 學習前的準備工作
- 10.2 用圖片處理函數畫一張圖
- 10.3 生成驗證碼
- 10.4 圖像縮放和裁剪技術
- 10.5 圖片水印處理
- 11.錯誤處理
- 11.1 禁止顯示錯誤
- 11.2 錯誤報告級別
- 11.3 錯誤記錄日志
- 11.4 自定義錯誤處理函數
- 12.MySQL 入門
- 12.1 請進入《MySQL入門》
- 13. PHP操作mysql數據庫
- 13.1 數據庫連接步驟
- 13.2 通過步驟做一個用戶注冊
- 13.3 通過步驟做一個列表顯示
- 13.4 把用戶做個分頁
- 13.5 批量和指定刪除用戶
- 13.6 修改用戶信息
- 13.7 數據顯示亂碼終極解決辦法
- 14.會話管理和控制
- 14.1 Cookie概述
- 14.2PHP中的Cookie
- 14.3 session概述
- 14.4 PHP中使用session
- 14.5 SESSION應用實例
- 15.通過cURL來做小偷程序
- 15.1 curl的使用步驟
- 15.2 自定義get方法抓取網頁
- 15.3 使用post發送數據
- 16. 用PHP寫一個論壇
- 16.1 web2.0始于論壇
- 16.2 需求:開發前你要知道他的樣子
- 16.3 核心業務流程
- 16.3.1 用戶注冊流程
- 16.3.2 普通用戶和管理員登陸流程
- 16.3.3 發貼流程
- 16.3.4 回復流程
- 16.3.5 版塊管理流程
- 16.3.6 版主業務流程
- 16.3.7 金幣獎勵和消耗流程
- 16.4 數據庫表設計
- 16.5 文件和代碼規范
- 16.6 核心功能說明
- 16.6.1 項目目錄結構說明
- 16.6.2 公共文件的使用
- 16.6.3 模板引擎講解
- 16.6.4 用戶注冊、登陸功能講解
- 16.6.5 發帖功能講解
- 16.6.6 回帖功能講解
- 16.6.7 項目安裝模塊講解
- 附錄1. 版權聲明
- 附錄2 . 學習PHP常用的英文單詞