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

PHP 陣列操作完全指南:創建、遍歷、排序、合併與進階技巧

     編輯:PHP 綜合知識

PHP 陣列是鍵值有序映射,同時支援數值索引和關聯鍵,功能極其強大。本文系統整理陣列創建、輸出、檢測、增刪、查找、指針操作、遍歷、大小統計、排序、合併拆分、交集差集等核心操作,並提供最佳實踐建議。

一、陣列創建方式

<?php
// 1. 直接賦值 (索引自動遞增)
$state[] = '111';
$state[] = '222';

// 2. array() / [] 短語法 (PHP 5.4+)
$state = array('111', '222');
$state = ['one' => '111', 'two' => '222'];

// 3. range() 範圍填充
$num = range(1, 6);           // [1,2,3,4,5,6]
$num = range(1, 6, 2);        // [1,3,5] 步長
$ch = range('A', 'F');        // ['A','B','C','D','E','F']

// 4. list() 解包賦值
$state = ['one', 'two', 'three'];
list($one, $two, $three) = $state;
?>

二、輸出與檢測

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

// 輸出調試
print_r($arr);           // 結構化輸出
var_dump($arr);          // 含類型信息
var_export($arr);        // 可執行代碼形式

// 檢測是否陣列
is_array($arr);          // true
is_array('string');      // false
?>

三、增刪操作 (隊列/棧模擬)

操作函數說明返回值
頭部入隊array_unshift($arr, $val)數值鍵重排,關聯鍵不變新長度
尾部入隊array_push($arr, $val)支援批量推入新長度
頭部出隊array_shift($arr)數值鍵重排被移除值
尾部出隊array_pop($arr)棧操作被移除值

四、查找與定位

<?php
$user = ['admin', 'editor', 'viewer'];
$arr = ['one' => 1, 'two' => 2, 'three' => 3];

// 值搜索 (嚴格模式第3參數)
in_array('admin', $user);           // true
in_array('1', $arr, true);          // false (類型不匹配)

// 鍵搜索
array_key_exists('two', $arr);      // true
isset($arr['two']);                 // true (更快,但值為null時為false)

// 值搜索返回鍵
array_search(2, $arr);              // 'two'

// 獲取所有鍵/值
array_keys($arr);   // ['one','two','three']
array_values($arr); // [1,2,3] (重新索引)
?>

五、指針遍歷 (底層機制)

<?php
$arr = ['one' => 1, 'two' => 2, 'three' => 3];

// 基本指針操作
current($arr);   // 1 (當前值)
key($arr);       // 'one' (當前鍵)
next($arr);      // 2 (移動到下一個)
prev($arr);      // 1 (移動到上一個)
reset($arr);     // 1 (重置到首部)
end($arr);       // 3 (移動到尾部)
each($arr);      // ['1','value'=>1,'0'=>'one','key'=>'one'] + 指針後移

// 現代遍歷首選 foreach
foreach ($arr as $key => $val) { /* ... */ }

// 函數式遍歷
array_walk($arr, function($val, $key) { echo "$key=$val\n"; });
array_walk_recursive($multiArr, $callback); // 遞歸遍歷多維
?>

六、統計與去重

<?php
$arr = ['A', 'B', 'C', 'A', 'B', 'A'];

count($arr);                    // 6
count($multiArr, COUNT_RECURSIVE); // 遞歸計數

array_count_values($arr);       // ['A'=>3, 'B'=>2, 'C'=>1]
array_unique($arr);             // ['A','B','C'] (保留首次鍵)
?>

七、排序大全

函數排序依據順序保持鍵值關聯備註
sort()值升序否 (重建索引)標志: SORT_NUMERIC/STRING/REGULAR
rsort()值降序否
asort()值升序是關聯陣列首選
arsort()值降序是
ksort()鍵升序是
krsort()鍵降序是
natsort()值(自然序)升序是人類直覺排序: 1,2,10,20
natcasesort()值(自然序)升序是不區分大小寫
usort()自定義-否回調函數返回 -1/0/1
uasort()自定義-是
uksort()鍵自定義-是

八、合併、拆分、交集、差集

<?php
$a = ['A', 'B', 'C'];
$b = ['D', 'E'];

// 合併
array_merge($a, $b);           // ['A','B','C','D','E'] (數值鍵重排)
$a + $b;                       // ['A','B','C'] (+ 運算符保留首次鍵)
array_merge_recursive($a, $b); // 相同鍵合併為子陣列

// 合併鍵值對
array_combine(['a','b'], [1,2]); // ['a'=>1, 'b'=>2]

// 切片
array_slice($arr, 1, 2);       // 從索引1取2個
array_chunk($arr, 2);          // 分塊: [[0,1],[2,3],...]

// 交集 (保留第一個陣列的鍵)
array_intersect($a1, $a2, ...);        // 值交集
array_intersect_assoc($a1, $a2, ...);  // 鍵值交集
array_intersect_key($a1, $a2, ...);    // 鍵交集

// 差集 (只在第一個陣列中出現)
array_diff($a1, $a2, ...);             // 值差集
array_diff_assoc($a1, $a2, ...);       // 鍵值差集
array_diff_key($a1, $a2, ...);         // 鍵差集
?>

九、其他實用函數

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

array_rand($arr, 2);        // 隨機取 2 個鍵
shuffle($arr);              // 打亂順序 (原地修改)
array_sum($arr);            // 求和 (非數值忽略)
array_product($arr);        // 求積
array_reverse($arr, true);  // 反轉 (true 保持鍵)
array_flip($arr);           // 鍵值互換
array_map('strtoupper', $arr); // 映射處理
array_filter($arr, fn($v)=>$v>2); // 過濾
array_reduce($arr, fn($c,$v)=>$c+$v, 0); // 歸約
?>

十、最佳實踐建議

  1. 優先使用 [] 短語法 (PHP 5.4+),可讀性更好
  2. foreach 遍歷 替代指針函數,避免副作用
  3. 關聯陣列排序用 asort/ksort,保持鍵值關係
  4. 大數據量去重用 array_flip 雙翻轉:$arr = array_flip(array_flip($arr)) 比 array_unique 快數倍
  5. 嚴格比較用 in_array 第三參數 true,避免 '0' == 'string' 等陷阱
  6. 多維陣列操作善用 array_column/array_map,避免手寫循環

相關專題推薦

更多進階技巧,請參考:《PHP 陣列(Array)操作技巧大全》、《PHP 數據結構與算法教程》、《PHP 性能優化實戰》等專題。

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