2024 日本 PHP 研討會

陣列函式

另請參閱

另請參閱 is_array()explode()implode()preg_split()unset()

目錄

  • array — 建立陣列
  • array_all — 檢查是否所有陣列元素都滿足回呼函式
  • array_any — 檢查是否至少有一個陣列元素滿足回呼函式
  • array_change_key_case — 變更陣列中所有鍵的大小寫
  • array_chunk — 將陣列分割成區塊
  • array_column — 返回輸入陣列中單一欄的值
  • array_combine — 使用一個陣列作為鍵,另一個陣列作為值來建立陣列
  • array_count_values — 計算陣列中每個不同值的出現次數
  • array_diff — 計算陣列的差集
  • array_diff_assoc — 計算陣列的差集,並額外檢查索引
  • array_diff_key — 使用鍵值來計算陣列的差集
  • array_diff_uassoc — 計算陣列的差集,並使用使用者提供的回呼函式進行額外索引檢查
  • array_diff_ukey — 使用回呼函式對鍵值進行比較,計算陣列的差集
  • array_fill — 使用指定值填充陣列
  • array_fill_keys — 使用指定值填充陣列,並指定鍵值
  • array_filter — 使用回呼函式過濾陣列元素
  • array_find — 返回滿足回呼函式的第一個元素
  • array_find_key — 返回滿足回呼函式的第一個元素的鍵值
  • array_flip — 交換陣列中所有鍵值及其關聯的值
  • array_intersect — 計算陣列的交集
  • array_intersect_assoc — 計算陣列的交集,並額外檢查索引
  • array_intersect_key — 使用鍵值來計算陣列的交集
  • array_intersect_uassoc — 計算陣列的交集,並使用回呼函式比較索引
  • array_intersect_ukey — 使用回呼函式對鍵值進行比較,計算陣列的交集
  • array_is_list — 檢查給定的陣列是否為列表
  • array_key_exists — 檢查給定的鍵值或索引是否存在於陣列中
  • array_key_first — 取得陣列的第一個鍵值
  • array_key_last — 取得陣列的最後一個鍵值
  • array_keys — 返回陣列的所有鍵值或鍵值的子集
  • array_map — 將回呼函式應用於給定陣列的元素
  • array_merge — 合併一個或多個陣列
  • array_merge_recursive — 遞迴地合併一個或多個陣列
  • array_multisort — 對多個或多維陣列進行排序
  • array_pad — 使用指定值將陣列填充到指定的長度
  • array_pop — 將陣列末端的元素彈出
  • array_product — 計算陣列中值的乘積
  • array_push — 將一個或多個元素推入陣列的末端
  • array_rand — 從陣列中隨機取出一個或多個鍵值
  • array_reduce — 使用回呼函式將陣列迭代地簡化為單個值
  • array_replace — 將傳遞的陣列中的元素替換到第一個陣列中
  • array_replace_recursive — 遞迴地將傳遞的陣列中的元素替換到第一個陣列中
  • array_reverse — 返回元素順序相反的陣列
  • array_search — 在陣列中搜尋給定值,如果成功則返回第一個對應的鍵值
  • array_shift — 將陣列的第一個元素移除並返回
  • array_slice — 從陣列中擷取一部分
  • array_splice — 移除陣列的一部分並以其他元素取代
  • array_sum — 計算陣列中所有值的總和
  • array_udiff — 使用回呼函數比較資料,計算陣列的差集
  • array_udiff_assoc — 使用回呼函數比較資料,計算陣列的差集,並額外檢查索引鍵
  • array_udiff_uassoc — 使用回呼函數比較資料和索引鍵,計算陣列的差集,並額外檢查索引鍵
  • array_uintersect — 使用回呼函數比較資料,計算陣列的交集
  • array_uintersect_assoc — 使用回呼函數比較資料,計算陣列的交集,並額外檢查索引鍵
  • array_uintersect_uassoc — 使用不同的回呼函數比較資料和索引鍵,計算陣列的交集,並額外檢查索引鍵
  • array_unique — 移除陣列中的重複值
  • array_unshift — 將一個或多個元素添加到陣列的開頭
  • array_values — 返回陣列中所有的值
  • array_walk — 將使用者提供的函數應用於陣列的每個成員
  • array_walk_recursive — 遞迴地將使用者提供的函數應用於陣列的每個成員
  • arsort — 以遞減順序排序陣列並維持索引鍵關聯
  • asort — 以遞增順序排序陣列並維持索引鍵關聯
  • compact — 建立包含變數及其值的陣列
  • count — 計算陣列或可數物件中所有元素的數量
  • current — 返回陣列中的目前元素
  • each — 返回陣列中目前的鍵值對,並將陣列指標向前移動
  • end — 將陣列的內部指標設定為其最後一個元素
  • extract — 從陣列中將變數導入目前的符號表
  • in_array — 檢查陣列中是否存在某個值
  • key — 從陣列中擷取索引鍵
  • key_exists — array_key_exists 的別名
  • krsort — 以遞減順序根據索引鍵排序陣列
  • ksort — 以遞增順序根據索引鍵排序陣列
  • list — 將變數賦值,如同它們是一個陣列
  • natcasesort — 使用不區分大小寫的「自然排序」演算法排序陣列
  • natsort — 使用「自然排序」演算法排序陣列
  • next — 將陣列的內部指標向前移動
  • pos — current 的別名
  • prev — 將陣列的內部指標向後移動
  • range — 建立一個包含一定範圍元素的陣列
  • reset — 將陣列的內部指標設定為其第一個元素
  • rsort — 以遞減順序排序陣列
  • shuffle — 將陣列隨機排序
  • sizeof — count 的別名
  • sort — 以遞增順序排序陣列
  • uasort — 使用自訂比較函數排序陣列並維持索引關聯
  • uksort — 使用自訂比較函數依鍵值排序陣列
  • usort — 使用自訂比較函數依值排序陣列
新增註解

使用者貢獻的註解 4 則註解

et2225zas14 at susu dot ru
6 個月前
在使用陣列遍歷函數時,請小心回呼函數中的類型提示。在某些情況下,這可能會靜默地導致元素的資料類型發生變化。

<?php
declare(strict_types=1);

// 缺少致命 TypeError,無副作用
$unexpected = array_filter(['123', (string) PHP_INT_MAX], fn (int $item) => true);
var_dump($unexpected);

// 缺少致命 TypeError,類型轉換副作用
$unexpectedTypecasting = array_map(fn (int $item) => $item, ['123', (string) PHP_INT_MAX]);
var_dump($unexpectedTypecasting);

// 缺少致命 TypeError,類型轉換副作用
$unexpectedTypecasting = array_map(fn (string $item) => $item, [123, PHP_INT_MAX]);
var_dump($unexpectedTypecasting);

// 缺少致命 TypeError,類型轉換副作用
$unexpectedTypecasting = array_reduce(['123', (string) PHP_INT_MAX], fn (?int $carry, int $item) => $item);
var_dump($unexpectedTypecasting);

$bigIntValue = bcadd((string) PHP_INT_MAX, '1');
// 致命 TypeError
$expectedTypeError = array_map(fn (int $item) => $item, [$bigIntValue]);
var_dump($expectedTypeError);
?>

以上範例將輸出 (PHP 版本 8.3.6, error_reporting E_ALL)

<?php
array(2) {
[
0]=>
string(3) "123"
[1]=>
string(19) "9223372036854775807"
}
array(
2) {
[
0]=>
int(123)
[
1]=>
int(9223372036854775807)
}
array(
2) {
[
0]=>
string(3) "123"
[1]=>
string(19) "9223372036854775807"
}
int(9223372036854775807)

致命錯誤: 未捕捉到的型別錯誤: {closure}(): 參數 #1 ($item) 必須是 int 型別,給定的是 string
?>
permanovd at gmail dot com
6 年前
一個簡單的技巧可以幫助你透過名稱猜測 diff/intersect 或 sort 函數的功能。

[後綴] assoc - 額外的索引檢查。比較值和索引。

範例:array_diff_assoc、array_intersect_assoc。

[後綴] key - 僅索引檢查。忽略陣列的值,僅比較索引。

範例:array_diff_key、array_intersect_key。

[後綴] **empty** - 後綴中沒有 "key" 或 "assoc" 字。僅比較值。忽略陣列的索引。

範例:array_diff、array_intersect。

[前綴] u - 將使用使用者定義的函數進行比較。字母 u 在某些函數中可以使用兩次(例如 array_udiff_uassoc),這表示您必須使用 2 個函數(一個用於值,一個用於索引)。

範例:array_udiff_uassoc、array_uintersect_assoc。

這也適用於陣列排序函數

[前綴] a - 關聯式。將保留鍵值。

範例:arsort、asort。

[前綴] k - 鍵值排序。將依鍵值排序陣列。

範例:uksort、ksort。

[前綴] r - 反向。將以反向順序排序陣列。

範例:rsort、krsort。

[前綴] u - 按使用者定義的函數排序(與 diff/intersect 相同)。

範例:usort、uasort。
renatonascto at gmail dot com
16 年前
大型陣列會使用大量記憶體,可能會導致記憶體限制錯誤。您可以透過在使用完畢後立即銷毀它們來減少腳本的記憶體使用量。我只是透過銷毀一些我不再使用的變數,就釋放了幾MB 的記憶體。
您可以使用 memory_get_usage() 函數來查看記憶體使用量/增益。希望這有幫助!
indioeuropeo at driverop dot com
5 年前
我需要從陣列中取出一個元素,並根據需要移動其餘元素來改變它在陣列中的位置。
這是用來移動陣列元素的函式。第一個參數是欲操作的陣列。第二個參數是要移動的元素位置,第三個參數是目標位置。
此函式會回傳修改後的陣列。
<?php
function array_move_elem($array, $from, $to) {
if (
$from == $to) { return $array; }
$c = count($array);
if ((
$c > $from) and ($c > $to)) {
if (
$from < $to) {
$f = $array[$from];
for (
$i = $from; $i < $to; $i++) {
$array[$i] = $array[$i+1];
}
$array[$to] = $f;
} else {
$f = $array[$from];
for (
$i = $from; $i > $to; $i--) {
$array[$i] = $array[$i-1];
}
$array[$to] = $f;
}

}
return
$array;
}

?>
範例
<?php
$array
= array('Cero','Uno','Dos','Tres','Cuatro','Cinco','Seis','Siete','Ocho','Nueve','Diez');
$array = array_move_elem($array, 3, 5); // 將索引 3 的元素移動到索引 5...
print_r($array);

$array = array_move_elem($array, 5, 3); // 將索引 5 的元素移動到索引 3,讓陣列恢復原狀... ;)
print_r($array);

?>
返回
<?php
Array ( [0] => Cero [1] => Uno [2] => Dos [3] => Cuatro [4] => Cinco [5] => Tres [6] => Seis [7] => Siete [8] => Ocho [9] => Nueve [10] => Diez )
Array ( [
0] => Cero [1] => Uno [2] => Dos [3] => Tres [4] => Cuatro [5] => Cinco [6] => Seis [7] => Siete [8] => Ocho [9] => Nueve [10] => Diez )
?>
To Top