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

PHP 數組函數大全:創建、遍歷、增刪、切片、合併、交集、差集、隨機、分塊實戰速查

     編輯:PHP 相關知識

PHP 數組函數全景速查手冊:從創建到高級操作的分類指南與實戰模式

PHP 數組是有序映射,同時扮演列表、字典、集合、堆疊、隊列等多種數據結構。本文將 50+ 高頻數組函數按功能分類,給出簽名、典型用例、返回值陷阱、性能提示,供開發者隨時查閱。

一、 數組創建與基礎屬性

函數簽名用途示例
array() / []array(mixed ...$values): array創建索引/關聯數組['a'=>1, 'b'=>2]
range()range(int|string $start, int|string $end, int $step=1): array生成等差數列range(1,10,2) // [1,3,5,7,9]
compact()compact(string ...$varNames): array變量名→值 映射compact('a','b')
count()count(Countable|array $value, int $mode=COUNT_NORMAL): int元素個數COUNT_RECURSIVE 遞歸計數
array_key_exists()array_key_exists(string|int $key, array $array): bool鍵名是否存在不檢查值是否為 null

二、 遍歷與輸出


// 1. foreach (推薦)
foreach ($arr as $key => $val) { ... }

// 2. array_walk (引用修改)
array_walk($arr, function(&$v, $k) { $v = strtoupper($v); });

// 3. array_map (返回新數組)
$upper = array_map('strtoupper', $arr);

// 4. 鍵值分離
$keys = array_keys($arr);
$vals = array_values($arr); // 重建 0 索引

三、 增刪插入(棧/隊列操作)

操作函數返回值說明
尾部入棧array_push($arr, ...$vals)新長度等同 $arr[] = $v 批量版
尾部出棧array_pop($arr)被彈出的值空數組返回 null
頭部入隊array_unshift($arr, ...$vals)新長度數字鍵名重建從 0
頭部出隊array_shift($arr)被移除的值數字鍵名重建從 0

四、 切片、拼接、重組

函數簽名關鍵差異
array_slice()array_slice(array $array, int $offset, int|null $length=null, bool $preserve_keys=false): array不修改原數組,$preserve_keys 保留關聯鍵
array_splice()array_splice(array &$array, int $offset, int|null $length=null, mixed $replacement=[]): array修改原數組,返回被移除元素,支持替換
array_merge()array_merge(array ...$arrays): array字符串鍵後覆蓋前,數字鍵重建 0 索引
array_merge_recursive()array_merge_recursive(array ...$arrays): array相同字符串鍵合併為數組,不覆蓋
array_combine()array_combine(array $keys, array $values): array鍵值陣列長度必須相等
array_chunk()array_chunk(array $array, int $length, bool $preserve_keys=false): array分塊為多維數組,分頁處理利器

五、 集合運算:交集、差集、唯一

函數比較依據鍵名保留示例
array_intersect()值第一個數組的鍵交集
array_intersect_assoc()鍵+值第一個數組的鍵關聯交集
array_intersect_key()鍵第一個數組的鍵鍵交集
array_diff()值第一個數組的鍵差集 (在 A 不在 B)
array_diff_assoc()鍵+值第一個數組的鍵關聯差集
array_diff_key()鍵第一個數組的鍵鍵差集
array_unique()值 (字符串比較)首次出現的鍵去重,保留首個鍵

六、 隨機、搜索、統計

函數用途關鍵點
array_rand()隨機取鍵名單個返標量,多個返數組
shuffle()打亂順序修改原數組,重建數字鍵
in_array()值是否存在第三參數 true 嚴格模式 (類型+值)
array_search()搜索值返回鍵找到第一個返回鍵,失敗 false
array_sum()值求和非數值跳過,字符串數字轉換
array_count_values()值頻次統計返回 [值=>次數],僅支持標量值
array_column()提取列array_column($arr, 'name', 'id') 以 id 為鍵

七、 進階:回調函數族


// 過濾
$filtered = array_filter($arr, fn($v) => $v > 10); // 保留值
$filtered = array_filter($arr, fn($v, $k) => $k % 2 === 0, ARRAY_FILTER_USE_KEY); // 按鍵

// 走訪修改
array_walk($arr, fn(&$v, $k) => $v *= 2);

// 歸約
$sum = array_reduce($arr, fn($carry, $v) => $carry + $v, 0);

// 鍵名/值映射
$mapped = array_map(fn($v) => $v * 2, $arr); // 返回新數組

八、 避坑指南精選

坑點現象解決
array_merge 數字鍵重建array_merge([5=>'a'], [6=>'b']) 返回 [0=>'a', 1=>'b']需保留鍵用 + 運算符:$a + $b
in_array 類型轉換陷阱in_array('abc', [0]) 返回 true嚴格模式 in_array('abc', [0], true)
array_unique 保留首個鍵關聯數組去重後鍵名可能非預期去重後 array_values() 重建索引
shuffle 破壞關聯鍵關聯數組打亂後鍵名重建為 0,1,2...需保留鍵:uksort($arr, fn() => rand(-1,1))
大數組 array_diff 性能百萬級差集耗時秒級鍵差集用 array_diff_key;值差集建立翻轉索引

九、 實戰模式:分頁處理大數組


function processInChunks(array $data, int $chunkSize, callable $handler): void
{
    foreach (array_chunk($data, $chunkSize, true) as $chunk) {
        $handler($chunk);
        // 可選:釋放內存
        unset($chunk);
    }
}

// 使用
processInChunks($hugeArray, 1000, function($chunk) {
    // 批量入庫、發送隊列、寫入文件
    Model::insert($chunk);
});

十、 結語

PHP 數組函數庫極其豐富,掌握「創建→遍歷→增刪→切片→合併→集合運算→隨機/統計」七大分類核心函數,並牢記 array_merge 數字鍵重建、in_array 嚴格模式、shuffle 破壞關聯鍵三大經典坑點,即可應對 95% 的業務場景。大數據量場景請優先考慮 array_chunk 分批處理、Generator 流式處理或遷移至 Redis/數據庫集合運算。

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