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

PHP 陣列完整指南:類型、宣告、遍歷與多維操作

     編輯:PHP 相關知識

PHP 陣列完整指南:類型、宣告、遍歷與多維操作

PHP 陣列實際上是有序映射,同時支援整數索引(類似 C++ vector)與字串鍵(類似 C++ map),且可混合使用。本文系統整理三大類型、多種宣告方式、遍歷技巧與多維陣列操作。

一、三大陣列類型

類型別名鍵值型態對應 C++ 概念
索引陣列數值陣列整數(0 起)std::vector
關聯陣列鍵值陣列字串std::map<string, T>
多維陣列巢狀陣列值為陣列vector<vector<T>> 或 map<string, vector<T>>

二、宣告與初始化

1. 索引陣列

// 自動分配索引
$names = ['Peter', 'Joe', 'Lily']; // PHP 5.4+ 短語法
$names = array('Peter', 'Joe', 'Lily'); // 傳統語法

// 手動指定索引
$names[0] = 'Peter';
$names[1] = 'Joe';
$names[2] = 'Lily';

// 存取
echo $names[0]; // Peter

2. 關聯陣列

// 宣告
$ages = ['Peter' => 32, 'Joe' => 30, 'Lily' => 28];
// 或
$ages['Peter'] = 32;
$ages['Joe'] = 30;
$ages['Lily'] = 28;

// 存取
echo "Peter is {$ages['Peter']} years old."; // Peter is 32 years old.

3. 多維陣列

$families = [
    'Griffin' => ['Peter', 'Lois', 'Megan'],
    'Quagmire' => ['Glenn'],
    'Brown' => ['Cleveland', 'Loretta', 'Junior'],
];

echo "Is {$families['Griffin'][2]} a part of the Griffin family?"; // Is Megan a part...

三、遍歷方式

1. for 迴圈(僅適用索引陣列)

$names = ['Peter', 'Joe', 'Lily'];
for ($i = 0, $len = count($names); $i < $len; $i++) {
    echo $names[$i];
}

2. foreach(通用,推薦)

// 僅需值
foreach ($names as $value) { echo $value; }

// 需要鍵值
foreach ($ages as $key => $value) { echo "$key: $value"; }

3. 多維陣列巢狀遍歷

$wage = [
    '市場部' => [
        [1, '李某', '市場經理', 8000],
        [2, '王某', '市場專員', 5000],
    ],
    '產品部' => [
        [1, '張某', '產品經理', 9000],
    ],
];

foreach ($wage as $dept => $staffList) {
    echo "$dept 部門人員如下
"; foreach ($staffList as $staff) { foreach ($staff as $field) { echo $field . ' '; } echo '
'; } }

四、實用陣列函式速查

功能函式說明
合併array_merge(), + 運算子後者保留數值索引不重新排序
差集array_diff(), array_diff_key()比較值 / 比較鍵
交集array_intersect()
鍵值互換array_flip()值必須唯一
去重array_unique()保留首次出現的鍵
隨機取樣array_rand()回傳鍵
排序sort()/rsort(), asort()/arsort(), ksort()/krsort()值排序/鍵值排序/鍵排序
分塊array_chunk()分頁處理大陣列
欄位提取array_column()PHP 5.5+,從多維陣列提取單欄

五、常見陷阱與最佳實務

  1. 參考傳遞修改:foreach ($arr as &$v) { $v *= 2; } unset($v); 最後 unset($v) 避免殘留參考污染後續迴圈。
  2. 數值索引重排:array_values() 重置索引;unset($arr[1]) 會留下索引斷層。
  3. 字串鍵自動轉型:$arr['1'] 與 $arr[1] 視為同一鍵;$arr['01'] 則不同。
  4. 大陣列記憶體:處理百萬筆資料時,改用 Generator 或分批 array_chunk 處理,避免一次載入耗盡 memory_limit。
  5. 嚴格型別:PHP 8.1+ 可用 array_is_list() 判斷是否為列表(連續整數索引從 0 開始),配合 #[ArrayShape] 進行靜態分析。

六、進階:陣列物件化

若需型別提示與 IDE 支援,可將陣列轉為 DTO 物件:

class UserDTO {
    public function __construct(
        public string $name,
        public int $age,
        public string $email,
    ) {}
}

$userArr = ['name' => 'Tom', 'age' => 25, 'email' => 'tom@example.com'];
$user = new UserDTO(...$userArr); // PHP 8.1+ 解包
// 或舊版:$user = new UserDTO($userArr['name'], $userArr['age'], $userArr['email']);

結語

PHP 陣列功能強大且靈活,掌握其底層為有序映射的特性,善用 foreach、內建函式與型別系統,能寫出簡潔高效的資料處理代碼。下一步可探討 ArrayAccess, Iterator, Collection 等進階介面應用。

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