萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 網路程式設計 >> PHP 程式設計

PHP 陣列定義與操作完整入門教學

前言

陣列是 PHP 最強大、最常用的資料結構,本質上是有序的映射。PHP 陣列同時支援索引陣列、關聯陣列、多維陣列,且大小動態調整。本文從定義語法、存取、遍歷、常用操作到進階技巧,建立完整知識體系。

陣列定義語法

短陣列語法 [](PHP 5.4+,推薦)

<?php
// 索引陣列(數字鍵,自動從 0 開始)
$fruits = ['apple', 'banana', 'orange'];

// 關聯陣列(字串鍵 => 值)
$user = [
    'name'  => 'John',
    'email' => 'john@example.com',
    'age'   => 30,
    'tags'  => ['php', 'laravel', 'mysql']
];

// 混合鍵
$mixed = [
    10 => 'ten',
    'name' => 'John',
    20 => 'twenty',
];
?>

傳統 array() 語法

<?php
$fruits = array('apple', 'banana', 'orange');
$user = array('name' => 'John', 'age' => 30);
?>

動態建立(無需預先宣告)

<?php
$arr = []; // 初始化空陣列
$arr[] = 'first';  // 自動索引 0
$arr[] = 'second'; // 自動索引 1
$arr['key'] = 'value'; // 關聯鍵

// 多維動態建構
$matrix = [];
for ($i = 0; $i < 3; $i++) {
    for ($j = 0; $j < 3; $j++) {
        $matrix[$i][$j] = $i * $j;
    }
}
?>

陣列存取與修改

<?php
$user = ['name' => 'John', 'age' => 30, 'skills' => ['PHP', 'JS']];

// 讀取
echo $user['name'];           // John
echo $user['skills'][0];      // PHP

// 修改
$user['age'] = 31;
$user['skills'][1] = 'TypeScript';

// 新增
$user['city'] = 'Taipei';
$user['skills'][] = 'Python';

// 判斷鍵是否存在
isset($user['name']);        // true(快,但值為 null 回 false)
array_key_exists('name', $user); // true(含 null 值)
?>

陣列遍歷(迭代)

foreach(最常用、最安全)

<?php
$colors = ['red', 'green', 'blue'];

// 僅需值
foreach ($colors as $color) {
    echo $color . "\n";
}

// 需要鍵與值
$user = ['name' => 'John', 'age' => 30];
foreach ($user as $key => $value) {
    echo "$key: $value\n";
}

// 參考修改原陣列值
foreach ($colors as &$color) {
    $color = strtoupper($color);
}
unset($color); // 重要:解除參考
print_r($colors); // ['RED', 'GREEN', 'BLUE']
?>

for 迴圈(適用索引陣列、需控制索引)

<?php
$arr = ['a', 'b', 'c'];
for ($i = 0, $len = count($arr); $i < $len; $i++) {
    echo "$i: {$arr[$i]}\n";
}
?>

while + each() / list()(舊式,不推薦新代碼)

<?php
$arr = ['a', 'b', 'c'];
reset($arr); // 重置指標
while (list($key, $val) = each($arr)) {
    echo "$key => $val\n";
}
// PHP 7.2+ each() 棄用,8.0+ 移除
?>

多維陣列遞迴遍歷

<?php
function printArrayRecursive(array $arr, int $depth = 0): void {
    $indent = str_repeat('  ', $depth);
    foreach ($arr as $key => $value) {
        if (is_array($value)) {
            echo "$indent[$key] => Array\n";
            printArrayRecursive($value, $depth + 1);
        } else {
            echo "$indent[$key] => $value\n";
        }
    }
}

$data = [
    'user' => ['name' => 'John', 'tags' => ['php', 'go']],
    'settings' => ['theme' => 'dark', 'lang' => 'zh_TW']
];
printArrayRecursive($data);
?>

常用陣列操作函數分類速查

增刪改查

操作函數/語法備註
尾端推入array_push($arr, $v) / $arr[] = $v$arr[] 效能更好
尾端彈出array_pop($arr)返回彈出值
頭端推入array_unshift($arr, $v)索引重新排序
頭端彈出array_shift($arr)索引重新排序
指定位置插入/刪除/替換array_splice($arr, $offset, $len, $new)功能最強大
刪除指定鍵unset($arr[$key])不重新索引
合併(字串鍵後者覆蓋,數字鍵重新索引)array_merge($a, $b)
合併(先出現優先,鍵保留)$a + $b

搜尋與篩選

操作函數範例
值搜尋(回傳鍵)array_search($val, $arr, true)第三參數 true 嚴格比較
鍵存在檢查array_key_exists($key, $arr)
值存在檢查in_array($val, $arr, true)嚴格模式建議開啟
篩選array_filter($arr, fn($v) => $v > 10)保留鍵,可用 array_values() 重新索引
映射轉換array_map(fn($v) => $v*2, $arr)
歸約array_reduce($arr, fn($c, $v) => $c+$v, 0)求和、累積

排序

函數說明鍵名保留
sort()值由小到大❌ 重新索引
rsort()值由大到小❌
asort()值由小到大✅ 保留鍵值關聯
arsort()值由大到小✅
ksort()鍵由小到大✅
krsort()鍵由大到小✅
usort()自訂比較函數排序值❌
uasort()自訂比較函數排序值✅
uksort()自訂比較函數排序鍵✅

實用技巧

陣列去重

<?php
$arr = [1, 2, 2, 3, 3, 3];
$unique = array_unique($arr); // [1, 2, 3] 保留第一次出現的鍵
$reindexed = array_values($unique); // [1, 2, 3] 重新索引 0,1,2
?>

陣列欄位提取

<?php
$users = [
    ['id'=>1, 'name'=>'A', 'age'=>20],
    ['id'=>2, 'name'=>'B', 'age'=>25],
];
$names = array_column($users, 'name'); // ['A', 'B']
$ids = array_column($users, 'id', 'name'); // ['A'=>1, 'B'=>2] 第三參數作鍵
?>

陣列分塊

<?php
$items = range(1, 10);
$chunks = array_chunk($items, 3); 
// [[1,2,3], [4,5,6], [7,8,9], [10]]
?>

結語

PHP 陣列融合了列表、映射、集合、堆疊、佇列等多種資料結構特性,靈活強大。掌握 [] 短語法、foreach 參考遍歷、array_map/filter/reduce 函數式風格、排序函數的鍵名保留差異,能讓資料處理代碼更簡潔、高效、易讀。記住:動態建構多維陣列時先初始化子陣列,合併陣列明確選擇 + 或 array_merge。

copyright © 萬盛學電腦網 all rights reserved