首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 陣列基礎入門筆記(一):定義、索引陣列與關聯陣列

     編輯:PHP 相關知識

PHP 陣列基礎入門筆記(一):定義、索引陣列與關聯陣列

陣列是 PHP 中最核心、最靈活的資料結構。本筆記系列將系統梳理陣列的定義、分類、初始化、賦值、存取等基礎知識,適合初學者建立正確概念,也適合老手快速複習。

1. 什麼是陣列?

陣列是一組有序的鍵值對集合。每個元素由鍵與值組成:

  • 鍵:可以是整數或字串,用於唯一標識元素位置。
  • 值:可以是任意 PHP 型別(標量、陣列、物件、資源等)。
  • 有序:元素按照插入順序排列,foreach 遍歷順序即插入順序。

這與 C/Java 的「固定大小、同型別、連續記憶體」陣列截然不同,PHP 陣列實為有序哈希表。

2. 陣列定義語法

// 短陣列語法 (PHP 5.4+,推薦)
$arr = [];

// 經典語法
$arr = array();

// 宣告並初始化
$arr = [1, 2, 3];           // 索引陣列
$arr = ['a' => 1, 'b' => 2]; // 關聯陣列

3. 索引陣列 vs 關聯陣列

分類依據在於鍵的型別:

類型鍵名特徵範例
索引陣列全為整數,且自動從 0 開始連續遞增[10, 20, 30] → 鍵為 0,1,2
關聯陣列包含至少一個字串鍵['name' => 'Tom', 'age' => 18]
混合陣列同時包含整數與字串鍵[10, 'name' => 'Tom']

注意:PHP 內部不區分兩者,array 型別統一。但行為上有差異:

  • array_push()、array_pop()、array_shift()、array_unshift() 只操作整數鍵(重新索引)。
  • foreach 遍歷順序永遠是插入順序,與鍵型別無關。

4. 索引陣列初始化與賦值

// 三種等價寫法
$arr[0] = 1;           // 直接指定索引賦值
$arr = ['0' => 1];     // 明確指定字串鍵 '0'(會被轉為整數 0)
$arr = [1];            // 短語法,自動分配索引 0

// 讀取
echo $arr[0]; // 1

5. 關聯陣列初始化與存取

$user = [
    'name' => '張三',
    'age'  => 25,
    'city' => '北京'
];

// 讀取
echo $user['name']; // 張三

// 新增/修改
$user['email'] = 'zhangsan@example.com';
$user['age'] = 26;

// 刪除
unset($user['city']);

// 判斷鍵是否存在
isset($user['name']);   // true(值非 null)
array_key_exists('age', $user); // true(即使值為 null)

6. 陣列遍歷基礎

$arr = ['a' => 1, 'b' => 2, 'c' => 3];

// 只取值
foreach ($arr as $value) {
    echo $value . ' ';
}

// 取鍵與值(推薦)
foreach ($arr as $key => $value) {
    echo "$key => $value\n";
}

// 參考傳遞修改原陣列值
foreach ($arr as &$value) {
    $value *= 2;
}
unset($value); // 重要:解除參考,避免後續誤用
print_r($arr); // a=>2, b=>4, c=>6

7. 常見陷阱預警

  1. 整數鍵自動重新索引:array_merge()、array_push()、array_unshift() 會將整數鍵重新從 0 排序,字串鍵保持不變(後者覆蓋前者)。
  2. 字串鍵數字字串會被轉換:$arr['0'] 等同於 $arr[0],$arr['01'] 保持字串 '01'。
  3. foreach 參考殘留:參考遍歷後必須 unset($value),否則後續迴圈可能污染最後一個元素(詳見「PHP foreach 參考陷阱」筆記)。
  4. 陣列複製是淺拷貝:$b = $a 複製鍵值對,若值為物件/資源/陣列,則共享同一實體。深拷貝需用 serialize/unserialize 或遞迴複製。

8. 實戰練習

// 練習 1:建立一個包含 5 個城市名稱的索引陣列,輸出第 3 個
$cities = ['台北', '台中', '高雄', '台南', '新竹'];
echo $cities[2]; // 高雄

// 練習 2:建立一個學生關聯陣列,包含姓名、學號、科系,修改科系並新增電話
$student = ['name' => '李四', 'id' => 'S12345', 'dept' => '資工系'];
$student['dept'] = '電機系';
$student['phone'] = '0912-345678';

// 練習 3:遍歷練習 2 的陣列,格式化輸出 "鍵: 值"
foreach ($student as $k => $v) {
    echo "$k: $v\n";
}

下一篇筆記將深入陣列進階操作:多維陣列、陣列函式大全、排序與過濾、SPL 陣列物件等。請動手實作上述練習,建立肌肉記憶。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved