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

PHP array() 函數深度解析:從基礎語法到多維數組構建與常用操作速查表

     編輯:PHP 相關知識

PHP array() 函數深度解析

array() 是 PHP 中創建數組的語言構造(非函數),支援鍵值對、自動索引、多維嵌套。PHP 5.4+ 推薦使用短語法 [],功能完全一致且更簡潔。

基本語法與三種定義方式

<?php
// 1. 索引數組(自動 0 起索引)
$colors = ['red', 'green', 'blue'];           // 短語法
$colors = array('red', 'green', 'blue');      // 經典語法

// 2. 關聯數組(字符串鍵)
$user = [
    'name' => '張三',
    'age' => 28,
    'email' => 'zhang@example.com'
];

// 3. 混合鍵:整數鍵指定後,後續自動索引從最大整數鍵+1 開始
$mix = [1 => 'a', 'b', 5 => 'c', 'd']; // 鍵:1,2,5,6
var_dump($mix);
/*
array(4) {
  [1]=> string(1) "a"
  [2]=> string(1) "b"
  [5]=> string(1) "c"
  [6]=> string(1) "d"
}
*/

多維數組構建範例

$data = [
    'fruits' => [
        'a' => '橙子',
        'b' => '香蕉',
        'c' => '蘋果'
    ],
    'numbers' => [1, 2, 3, 4, 5, 6],
    'holes' => ['first', 5 => 'second', 'third'] // 鍵:0,5,6
];

// 訪問
echo $data['fruits']['b']; // 香蕉
echo $data['holes'][5];    // second

雙引號字符串中解析數組元素

$arr = ['key' => 'value'];
echo "Hello {$arr['key']}!"; // 正確:花括號包裹
// echo "Hello $arr['key']!"; // 錯誤:語法解析異常

陣列核心操作速查表(高頻 30+ 函數)

分類函數說明返回值
創建/合併array() / []創建數組array
array_merge()合併數組(字符串鍵後覆蓋前,數字鍵重新索引)array
array_merge_recursive()遞歸合併(相同字符串鍵值變為數組)array
array_combine()用一個數組作鍵、另一個作值創建新數組array
array_fill()用指定值填充指定長度array
range()創建範圍數組 range(1,5)→[1,2,3,4,5]array
查找/過濾in_array()檢查值是否存在(嚴格模式第3參數 true)bool
array_search()搜索值,返回對應鍵(首次匹配)mixed|false
array_key_exists() / isset($arr[$key])檢查鍵是否存在(isset 不檢查 null 值)bool
array_filter()回調過濾元素(保留返回 true 的)array
array_unique()移除重複值(保留首次出現的鍵)array
array_column()提取多維數組某一列 array_column($users,'name')array
鍵值操作array_keys()獲取所有鍵array
array_values()獲取所有值(重新索引 0...)array
array_flip()交換鍵值(值必須為字符串/整數)array
array_change_key_case()鍵名統一大小寫array
array_reverse()翻轉順序array
shuffle()打亂順序(原地修改)bool
排序sort() / rsort()值排序(重新索引)bool
asort() / arsort()值排序(保持鍵關聯)bool
ksort() / krsort()鍵排序bool
natsort() / natcasesort()自然排序(人類直覺順序:img2 < img10)bool
usort() / uasort() / uksort()用戶自定義比較函數排序bool
array_multisort()多數組/多維排序bool
堆疊/隊列array_push() / array_pop()棧操作(尾部進出)int/mixed
array_unshift() / array_shift()隊列操作(頭部進出,重新索引)int/mixed
array_slice()切片(不修改原數組)array
array_splice()切割並替換(修改原數組)array(被移除元素)
array_pad()填充到指定長度array
array_rand()隨機取一或多個鍵mixed
計算/統計count() / sizeof()元素個數int
array_sum()值求和number
array_product()值求積number
array_count_values()統計值出現次數array
array_reduce()遞歸減簡為單一值mixed
array_map()回調映射每個元素array
交集/差集array_intersect()交集(比較值)array
array_diff()差集(比較值)array
array_intersect_assoc()交集(比較鍵+值)array
array_diff_assoc()差集(比較鍵+值)array
array_intersect_key()交集(比較鍵)array
array_diff_key()差集(比較鍵)array
指針/遍歷current() / key() / next() / prev() / reset() / end()內部指針操作mixed
each()返回鍵值對並前進指針(PHP 7.2 棄用,8.0 移除)array|false
list() / []解包賦值 [$a,$b] = $arrvoid
extract()將鍵值導入符號表(慎用,安全風險)int

常見陷阱與最佳實踐

  1. 不要用 extract($_POST):污染全局命名空間,安全隱患極大。
  2. 嚴格模式比較:in_array($needle, $haystack, true) 避免 '123' == 123 導致誤判。
  3. 引用傳值修改:foreach ($arr as &$v) $v *= 2; 循環後 unset($v) 解除引用,否則污染最後一個元素。
  4. 大數組內存優化:生成器 yield 替代 array_map,或用 SplFixedArray(固定長度、類 C 數組、內存省 50%)。
  5. JSON 互轉:json_encode($arr, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES),json_decode($json, true) 強制返回關聯數組。

PHP 8.1+ 新特性:array_is_list() / array_is_assoc()

// 判斷是否為列表(連續整數鍵 0...n)
array_is_list(['a','b','c']); // true
array_is_list([1=>'a','b']);  // false (鍵不從0開始)
array_is_list(['a'=>1]);      // false (字符串鍵)

// 判斷是否為關聯數組(非列表)
array_is_assoc([]);           // false (空數組視為列表)
array_is_assoc([0=>'a']);     // false
array_is_assoc(['x'=>1]);     // true

掌握以上核心函數與陷阱,數組操作將不再是 Bug 溫床,而是高效表達業務邏輯的利器。

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