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

PHP 數組核心函數大全:創建、提取、檢測、增刪、棧隊操作完全指南

     編輯:PHP 相關知識

數組是 PHP 最強大的數據結構。本文系統整理數組核心函數:創建、提取、檢測、首尾增刪(棧/隊列)、鍵值操作、遍歷、合併拆分,附代碼示例與性能提示。

一、創建數組

<?php
// 1. array() / [] 短語法
$arr = ['a', 'b', 'c'];
$assoc = ['name' => 'Tom', 'age' => 25];

// 2. range() 快速生成序列
$nums = range(1, 100);        // 1..100
$even = range(2, 100, 2);     // 2,4,6..100
$letters = range('a', 'z');   // a..z

// 3. array_fill() 填充固定值
$arr = array_fill(0, 10, 'default'); // 10 個 'default'

// 4. array_combine() 鍵值組合
$keys = ['a','b','c']; $vals = [1,2,3];
$arr = array_combine($keys, $vals); // ['a'=>1, 'b'=>2, 'c'=>3]
?>

二、提取與檢測

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

// 提取值到變量
list($a, $b, $c) = $arr; // $a=1, $b=2, $c=3
// 或跳過
list(, $b,) = $arr; // 只取 $b

// 檢測是否數組
is_array($arr); // true
is_array('str'); // false

// 檢測鍵是否存在
array_key_exists('a', $arr); // true
isset($arr['a']); // true (值非 null)
?>

三、棧/隊列操作(首尾增刪)

操作函數行為返回值時間複雜度
隊列入隊(尾部進)array_push($arr, $v)尾部添加,支持多值新長度O(1) 攤銷
隊列出隊(尾部出)array_pop($arr)移除並返回尾部元素元素值O(1)
棧入棧(頭部進)array_unshift($arr, $v)頭部添加,數字鍵重排新長度O(n) 需移動
棧出棧(頭部出)array_shift($arr)移除並返回頭部元素元素值O(n) 需移動
<?php
$stack = ['orange', 'banana'];
array_push($stack, 'apple', 'raspberry'); // ['orange','banana','apple','raspberry']
$fruit = array_pop($stack); // 'raspberry', $stack=['orange','banana','apple']

$queue = ['a','b'];
array_unshift($queue, 'first'); // ['first','a','b']
$first = array_shift($queue); // 'first', $queue=['a','b']

// 性能提示:尾部操作快,頭部操作慢(需重排索引)
// 高頻頭部操作請用 SplDoublyLinkedList
?>

四、鍵值與結構操作

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

// 獲取所有鍵/值
array_keys($arr);   // ['a','b','c']
array_values($arr); // [1,2,3] (重建數字索引)

// 翻轉鍵值(值必須唯一)
$flipped = array_flip($arr); // [1=>'a', 2=>'b', 3=>'c']

// 反轉順序
array_reverse($arr); // ['c'=>3, 'b'=>2, 'a'=>1] (保留鍵)
array_reverse($arr, true); // 保留鍵關聯

// 合併數組
$arr1 = ['a'=>1]; $arr2 = ['b'=>2, 'a'=>99];
$merged = array_merge($arr1, $arr2); // ['a'=>99, 'b'=>2] 後者覆蓋同名鍵
$merged = $arr1 + $arr2; // ['a'=>1, 'b'=>2] + 運算符:先來優先

// 拆分數組
list($first, $rest) = [array_shift($arr), $arr]; // 手動拆分
// 或 array_slice
$slice = array_slice($arr, 1, 2); // 從索引1取2個
?>

五、遍歷與回調

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

// 1. foreach (推薦,可引用修改)
foreach ($arr as $k => &$v) { $v *= 2; }
unset($v); // 解除引用

// 2. array_map (返回新數組)
$doubled = array_map(fn($v) => $v*2, $arr);

// 3. array_walk (原地修改,支持額外參數)
array_walk($arr, fn(&$v, $k, $mul) => $v *= $mul, 3);

// 4. array_filter / array_reduce
$evens = array_filter($arr, fn($v) => $v%2===0);
$sum = array_reduce($arr, fn($carry, $v) => $carry+$v, 0);
?>

六、性能與最佳實踐

  • 尾部操作優先:[]= / array_push / array_pop 比頭部操作快數量級
  • 避免循環中 count():for($i=0,$n=count($arr); $i<$n; $i++)
  • 大數組去重:array_unique 較慢,鍵值翻轉法 array_flip(array_flip($arr)) 更快
  • 引用陷阱:foreach ($arr as &$v) 循環後 unset($v),否則後續操作會修改最後一個元素
  • 嚴格類型:PHP 8.1+ array_is_list() 判斷是否列表(連續數字鍵從 0 開始)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved