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

PHP 陣列操作函數大全:建立、遍歷、修改、排序與進階技巧

     編輯:PHP 相關知識

陣列建立與初始化

基本建立方式

<?php
// 短陣列語法 (PHP 5.4+)
$numbers = [1, 3, 5, 7, 9];
$colors = ['red', 'blue', 'green'];

// 指定鍵值
$language = [
    1 => 'English',
    3 => 'Chinese',
    5 => 'French',
];

// 多維陣列
$matrix = [
    'color' => ['red', 'blue'],
    'week' => ['Monday', 'Friday'],
];
?>

函式建立陣列

<?php
// range():建立範圍陣列
$nums = range(1, 10);           // [1,2,3,4,5,6,7,8,9,10]
$step = range(0, 100, 10);      // [0,10,20,...,100]
$letters = range('A', 'Z');     // ['A','B',...,'Z']
$reverse = range('z', 'a');     // ['z','y',...,'a']

// array_fill():填充固定值
$filled = array_fill(0, 5, 'default'); // [0=>'default', 1=>'default', ...]
$keys = ['a', 'b', 'c'];
$filledKeys = array_fill_keys($keys, 'value'); // ['a'=>'value', 'b'=>'value', 'c'=>'value']

// array_combine():合併鍵值陣列
$keys = ['id', 'name', 'email'];
$values = [1, 'John', 'john@example.com'];
$user = array_combine($keys, $values);
// ['id'=>1, 'name'=>'John', 'email'=>'john@example.com']

// compact():變數轉陣列
$name = 'John';
$age = 25;
$arr = compact('name', 'age'); // ['name'=>'John', 'age'=>25]
?>

陣列遍歷方式

方式適用場景特點
foreach陣列/物件遍歷首選語法簡潔、支援參考修改、自動重置指標
for + count需索引控制、反向遍歷效能略低、程式碼較冗長
while + each/list舊版相容、特殊指標控制已棄用 (PHP 7.2+ each 棄用)
array_walk對每個元素執行回呼可傳遞額外參數、修改原陣列
array_map轉換陣列產生新陣列不修改原陣列、可多陣列並行處理
<?php
$data = ['apple', 'banana', 'cherry'];

// foreach 經典用法
foreach ($data as $key => $value) {
    echo "$key: $value\n";
}

// array_map:轉換大寫
$upper = array_map('strtoupper', $data);
// ['APPLE', 'BANANA', 'CHERRY']

// array_walk:修改原陣列 (加前綴)
array_walk($data, function(&$item, $key) {
    $item = "fruit_$item";
});
// ['fruit_apple', 'fruit_banana', 'fruit_cherry']

// 多陣列並行 map
$prices = [10, 20, 15];
$withTax = array_map(function($item, $price) {
    return "$item: \${$price}";
}, $data, $prices);
?>

陣列增刪改查 (CRUD)

新增元素

<?php
$arr = [1, 2, 3];

// 尾部追加
$arr[] = 4;                    // [1,2,3,4]
array_push($arr, 5, 6);        // [1,2,3,4,5,6] (可批次)

// 頭部插入
array_unshift($arr, 0);        // [0,1,2,3,4,5,6] (鍵值重新索引)

// 指定位置插入 (array_splice)
array_splice($arr, 3, 0, 99);  // [0,1,2,99,3,4,5,6]
?>

刪除元素

<?php
$arr = ['a', 'b', 'c', 'd', 'e'];

// 依值刪除 (首個符合)
unset($arr[2]);                // 刪除索引 2 ('c'),鍵值保留空洞
// ['a', 'b', 3=>'d', 4=>'e']

// 依條件刪除
$arr = array_filter($arr, function($v) { return $v !== 'b'; });
// 重新索引:array_values($arr)

// 彈出尾部
$last = array_pop($arr);       // 移除並回傳最後元素

// 彈出頭部
$first = array_shift($arr);    // 移除並回傳第一元素,鍵值重新索引

// 區間刪除/替換
array_splice($arr, 1, 2);      // 從索引 1 刪除 2 個元素
array_splice($arr, 1, 1, 'X'); // 替換索引 1 為 'X'
?>

修改與查找

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

// 檢查值是否存在
in_array('blue', $arr);        // true
in_array('blue', $arr, true);  // 嚴格模式 (型別也要符合)

// 搜尋鍵值
array_search('blue', $arr);    // 1 (第一個符合的鍵)
array_keys($arr, 'blue');      // [1, 3] (所有符合的鍵)

// 鍵值互換
$flipped = array_flip($arr);   // ['red'=>0, 'blue'=>3, 'green'=>2] (重複值後者覆蓋)

// 取得所有鍵/值
array_keys($arr);              // [0,1,2,3]
array_values($arr);            // ['red','blue','green','blue']

// 移除重複值
$unique = array_unique($arr);  // ['red', 'blue', 'green'] (保留第一個鍵)
$unique = array_values($unique); // 重新索引 [0,1,2]
?>

陣列排序大全

函式排序依據鍵值保留順序
sort()值❌ 重新索引升冪
rsort()值❌降冪
asort()值✅升冪
arsort()值✅降冪
ksort()鍵✅升冪
krsort()鍵✅降冪
natsort()值 (自然排序)✅升冪
natcasesort()值 (自然排序、忽略大小寫)✅升冪
usort()自訂比較函式❌自訂
uasort()自訂比較函式✅自訂
uksort()自訂鍵比較函式✅自訂
<?php
// 自然排序:人類直覺順序
$files = ['file1.txt', 'file10.txt', 'file2.txt'];
sort($files);       // ['file1.txt', 'file10.txt', 'file2.txt'] (ASCII)
natsort($files);    // ['file1.txt', 'file2.txt', 'file10.txt'] (自然)

// 自訂排序:依年齡降冪
$users = [
    ['name'=>'A', 'age'=>25],
    ['name'=>'B', 'age'=>30],
    ['name'=>'C', 'age'=>20],
];
usort($users, function($a, $b) {
    return $b['age'] <=> $a['age']; // 太空船運算子 PHP 7+
});
?>

進階陣列操作

陣列合併與差集/交集

<?php
$a = ['a', 'b', 'c'];
$b = ['c', 'd', 'e'];

// 合併 (數字鍵重新索引,字串鍵後者覆蓋)
$merged = array_merge($a, $b); // ['a','b','c','c','d','e']

// 遞迴合併 (相同字串鍵合併為陣列)
$recursive = array_merge_recursive(['x'=>1], ['x'=>2]); // ['x'=>[1,2]]

// 交集
array_intersect($a, $b);       // ['c'] (值交集)
array_intersect_assoc($a, $b); // [] (鍵值都相同)

// 差集
array_diff($a, $b);            // ['a','b'] (在 a 不在 b)
array_diff_assoc($a, $b);      // 鍵值都不同
?>

陣列切片與分塊

<?php
$arr = range(1, 20);

// 切片:從索引 5 取 3 個
$slice = array_slice($arr, 5, 3); // [6,7,8]

// 切片並移除 (splice 修改原陣列)
$removed = array_splice($arr, 5, 3); // $arr 剩餘元素,$removed=[6,7,8]

// 分塊:每 5 個一組
$chunks = array_chunk($arr, 5); // [[1..5], [6..10], [11..15], [16..20]]
$chunksKeys = array_chunk($arr, 5, true); // 保留原鍵值
?>

實用工具函式

<?php
$arr = [3, 1, 4, 1, 5, 9, 2, 6];

// 隨機打亂
shuffle($arr);

// 隨機取鍵
$randKey = array_rand($arr);        // 1 個鍵
$randKeys = array_rand($arr, 3);    // 3 個鍵 (陣列)

// 陣列求和
$sum = array_sum($arr);             // 31

// 統計值出現次數
$freq = array_count_values($arr);   // [3=>1, 1=>2, 4=>1, 5=>1, 9=>1, 2=>1, 6=>1]

// 反轉陣列
$rev = array_reverse($arr);         // 不修改原陣列
array_reverse($arr, true);          // 保留鍵值

// 陣列欄位提取 (多維陣列)
$users = [
    ['id'=>1, 'name'=>'A', 'age'=>20],
    ['id'=>2, 'name'=>'B', 'age'=>25],
];
$names = array_column($users, 'name'); // ['A', 'B']
$namesById = array_column($users, 'name', 'id'); // [1=>'A', 2=>'B']
?>

總結建議

  1. 遍歷用 foreach,轉換用 array_map,過濾用 array_filter
  2. 排序選擇表決定函式,自然排序用 natsort
  3. 記憶體敏感場景考慮 Generator (yield) 避免建立巨大陣列
  4. 嚴格模式:in_array/array_search 第三參數設 true
  5. 善用 array_column 處理資料庫結果集
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved