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

PHP 陣列操作大全:合併、拆分、追加、查找、刪除、遍歷與排序

     編輯:PHP 相關知識

陣列建立與基本概念

<?php
// 索引陣列
$fruits = ['apple', 'banana', 'orange'];

// 關聯陣列
$person = ['name' => 'John', 'age' => 30, 'city' => 'Taipei'];

// 多維陣列
$matrix = [
    [1, 2, 3],
    [4, 5, 6]
];
?>

陣列合併與連接

array_merge() - 合併陣列

$a = ['apple', 'banana'];
$b = ['orange', 'grape'];
$merged = array_merge($a, $b);
// ['apple', 'banana', 'orange', 'grape']

特性: 字串鍵名後者覆蓋前者;數字鍵名重新索引。

array_merge_recursive() - 遞歸合併

$a = ['color' => ['red']];
$b = ['color' => ['blue']];
$merged = array_merge_recursive($a, $b);
// ['color' => ['red', 'blue']]

array_combine() - 建立關聯陣列

$keys = ['name', 'age'];
$values = ['John', 30];
$combined = array_combine($keys, $values);
// ['name' => 'John', 'age' => 30]

兩陣列長度必須相同。

陣列拆分與接合

array_slice() - 切片(不修改原陣列)

$fruits = ['a', 'b', 'c', 'd', 'e'];
$slice = array_slice($fruits, 2, 2); // 從索引 2 取 2 個
// ['c', 'd']

$slice = array_slice($fruits, -3, 2); // 從倒數第 3 取 2 個
// ['c', 'd']

array_splice() - 切割並移除(修改原陣列)

$fruits = ['a', 'b', 'c', 'd', 'e'];
$removed = array_splice($fruits, 2, 2); // 移除索引 2,3
// $fruits 變為 ['a', 'b', 'e']
// $removed 為 ['c', 'd']

// 替換模式
array_splice($fruits, 1, 1, ['x', 'y']);
// $fruits 變為 ['a', 'x', 'y', 'e']

陣列交集與差集

$a = ['apple', 'banana', 'orange'];
$b = ['banana', 'grape', 'apple'];

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

array_diff($a, $b);          // ['orange'] - 在 $a 不在 $b
array_diff_assoc($a, $b);    // 鍵值都要相同

陣列遍歷方式

foreach(推薦)

foreach ($arr as $key => $value) {
    echo "$key => $value\n";
}

while + each/list(舊式)

reset($arr);
while (list($key, $val) = each($arr)) {
    echo "$key => $val\n";
}

內部指標函數

current($arr);  // 當前值
key($arr);      // 當前鍵
next($arr);     // 下一個
prev($arr);     // 上一個
reset($arr);    // 重置到第一個
end($arr);      // 移到最後一個
each($arr);     // 回傳當前鍵值並前進

陣列查找與搜尋

$arr = ['a' => 'apple', 'b' => 'banana', 'c' => 'orange'];

in_array('apple', $arr);           // true - 搜尋值
array_key_exists('a', $arr);       // true - 搜尋鍵
array_search('banana', $arr);      // 'b' - 回傳鍵
array_keys($arr);                  // ['a','b','c'] - 所有鍵
array_keys($arr, 'banana');        // ['b'] - 指定值的鍵
array_values($arr);                // ['apple','banana','orange'] - 所有值(重新索引)

陣列增刪(堆疊/佇列操作)

函數操作回傳類比
array_push()尾端推入新長度Stack Push
array_pop()尾端彈出被移除值Stack Pop
array_unshift()頭部推入新長度Queue Enqueue
array_shift()頭部彈出被移除值Queue Dequeue
$queue = ['a', 'b'];
array_push($queue, 'c'); // ['a','b','c']
array_unshift($queue, 'x'); // ['x','a','b','c']
$first = array_shift($queue); // 'x', $queue=['a','b','c']
$last = array_pop($queue); // 'c', $queue=['a','b']

陣列排序

函數排序依據保持鍵名關聯
sort()值否(重新索引)
rsort()值(降序)否
asort()值是
arsort()值(降序)是
ksort()鍵是
krsort()鍵(降序)是
natsort()自然排序是
usort()自訂比較函數否
uasort()自訂比較函數是
uksort()自訂鍵比較是
// 多維陣列排序
$users = [
    ['name' => 'John', 'age' => 30],
    ['name' => 'Jane', 'age' => 25]
];
array_multisort(array_column($users, 'age'), SORT_ASC, $users);

其他實用函數精選

array_unique($arr);           // 移除重複值
array_reverse($arr);          // 反轉順序
array_flip($arr);             // 鍵值互換
array_count_values($arr);     // 統計值出現次數
array_fill(0, 5, 'x');        // 建立填充陣列 ['x','x','x','x','x']
array_column($arr, 'name');   // 取出多維陣列某欄位
array_map('strtoupper', $arr); // 對每元素套用函數
array_filter($arr, fn($v) => $v > 10); // 過濾
array_reduce($arr, fn($c, $v) => $c+$v, 0); // 歸約求和
shuffle($arr);                // 隨機打亂
range(1, 10, 2);              // [1,3,5,7,9]

效能建議

  • 大量資料遍歷用 foreach,比 while/each 快約 20-30%
  • 需修改陣列值時用 while/each 或 for 迴圈
  • 避免在迴圈中重複呼叫 count($arr),預先存入變數
  • 大陣列操作考慮 SplFixedArray 節省記憶體

熟練掌握這些陣列函數,能讓 PHP 資料處理更簡潔高效。

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