PHP Conference Japan 2024

陣列

  • 簡介
  • 預定義常數
  • 排序陣列
  • 陣列函式
    • 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 — 使用使用者自訂比較函式依值排序陣列
新增註解

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

applegrew at rediffmail dot com
16 年前
給像我一樣的新手

建立新的陣列:
// 建立一個空陣列
$theVariable = array();

// 建立一個包含元素的陣列
$theVariable = array("A", "B", "C");

// 建立關聯式陣列
$theVariable = array(1 => "http//google.com", 2=> "http://yahoo.com");

// 建立具有命名鍵值的關聯式陣列
$theVariable = array("google" => "http//google.com", "yahoo"=> "http://yahoo.com");

備註
可以如下所示將新值新增到陣列中
$theVariable[] = "D";
$theVariable[] = "E";
Tyler Bannister
15 年前
要刪除個別的陣列元素,請使用 unset 函式

例如

<?PHP
$arr
= array( "A", "B", "C" );
unset(
$arr[1] );
// 現在 $arr = array( "A", "C" );
?>

unlink是用於刪除檔案。
macnimble at gmail dot com
15 年前
將線性陣列(例如 mysql 記錄集)轉換為樹狀或多維陣列可能會很麻煩。利用 PHP 中的參考,我們可以透過一次迴圈,像這樣「堆疊」一個陣列

<?php
# array_stack()
# Original idea from:
# http://www.ideashower.com/our_solutions/
# create-a-parent-child-array-structure-in-one-pass/
function array_stack (&$a, $p = '@parent', $c = '@children')
{
$l = $t = array();
foreach (
$a AS $key => $val):
if (!
$val[$p]) $t[$key] =& $l[$key];
else
$l[$val[$p]][$c][$key] =& $l[$key];
$l[$key] = (array)$l[$key] + $val;
endforeach;
return
$a = array('tree' => $t, 'leaf' => $l);
}

# Example:
$node = array();
$node[1] = array('@parent' => 0, 'title' => 'I am node 1.');
# ^-----------------------v Link @parent value to key.
$node[2] = array('@parent' => 1, 'title' => 'I am node 2.');
$node[3] = array('@parent' => 2, 'title' => 'I am node 3.');
$node[4] = array('@parent' => 1, 'title' => 'I am node 4.');
$node[5] = array('@parent' => 4, 'title' => 'I am node 5.');

array_stack($node);

$node['leaf'][1]['title'] = 'I am node one.';
$node['leaf'][2]['title'] = 'I am node two.';
$node['leaf'][3]['title'] = 'I am node three.';
$node['leaf'][4]['title'] = 'I am node four.';
$node['leaf'][5]['title'] = 'I am node five.';

echo
'<pre>',print_r($node['tree'],TRUE),'</pre>';
?>

請注意,這裡沒有對陣列值進行參數檢查,但這只是為了保持函式大小精簡。可以輕鬆地在其中快速檢查以確保 $a 參數實際上是一個陣列。

希望你覺得它有用。非常感謝 IdeaShower.com 的 Nate Weiner 提供了我建構的原始函式。
webmaster at infoproducts dot x10hosting dot com
16 年前
也可以如下所示將新值新增到陣列中
$theVariable["google"] = "http//google.com";

$theVariable["1"] = "http//google.com";
dragos dot rusu at NOSPAM dot bytex dot ro
14 年前
如果陣列項目的鍵值被宣告為 NULL,則陣列鍵值將自動轉換為空字串 '',如下所示

<?php
$a
= array(
NULL => 'zero',
1 => 'one',
2 => 'two');

// 這會顯示與值 "zero" 相關聯的鍵的空字串
var_dump(array_keys($a));

// 顯示陣列元素
reset($a);
while(
key($a) !== NULL )
{
echo
key($a) . ": ".current($a) . "<br>";// PHP_EOL
next($a);
}

// 不顯示陣列元素
reset($a);
while(
key($a) != NULL ) // '' == null => 不會執行任何迭代
{
echo
key($a) . ": ".current($a) . "<br>";// PHP_EOL
next($a);
}
andyd273 at gmail dot com
15 年前
對 Endel Dreyer 的 PHP 陣列轉 JavaScript 陣列函式做了一點小修正。我只是修改它以正確顯示鍵值。

function array2js($array,$show_keys)
{
$dimensoes = array();
$valores = array();

$total = count ($array)-1;
$i=0;
foreach($array as $key=>$value){
if (is_array($value)) {
$dimensoes[$i] = array2js($value,$show_keys);
if ($show_keys) $dimensoes[$i] = '"'.$key.'":'.$dimensoes[$i];
} else {
$dimensoes[$i] = '"'.addslashes($value).'"';
if ($show_keys) $dimensoes[$i] = '"'.$key.'":'.$dimensoes[$i];
}
if ($i==0) $dimensoes[$i] = '{'.$dimensoes[$i];
if ($i==$total) $dimensoes[$i].= '}';
$i++;
}
return implode(',',$dimensoes);
}
sunear at gmail dot com
15 年前
製作了這個函式來刪除陣列中的元素;

<?php

函式 array_del_elm($input_array, $del_indexes) {
如果 (
is_array($del_indexes)) {
$indexes = $del_indexes;
} 或是 (
is_string($del_indexes)) {
$indexes = explode($del_indexes, " ");
} 或是 (
is_numeric($del_indexes)) {
$indexes[0] = (integer)$del_indexes;
} 否則 返回;
$del_indexes = null;

$cur_index = 0;
如果 (
sort($indexes)) 從($i=0; $i<count($input_array); $i++) {
如果 (
$i == $indexes[$cur_index]) {
$cur_index++;
如果 (
$cur_index == count($indexes)) 返回 $output_array;
繼續;
}
$output_array[] = $input_array[$i];
}
返回
$output_array;
}

?>

但後來我看到了 Tyler Bannister 和 Paul 的方法,可以看出他們的方法更快,但在刪除多個元素方面存在缺陷,因此支援幾種提供參數的方式。我將這兩種方法結合到了這個

<?php

函式 array_del_elm($target_array, $del_indexes) {
如果 (
is_array($del_indexes)) {
$indexes = $del_indexes;
} 或是 (
is_string($del_indexes)) {
$indexes = explode($del_indexes, " ");
} 或是 (
is_numeric($del_indexes)) {
$indexes[0] = (integer)$del_indexes;
} 否則 返回;
unset(
$del_indexes);

從(
$i=0; $i<count($indexes); $i++) {
unset(
$target_array[$indexes[$i]]);
}
返回
$target_array;
}

?>

快速、相容且功能正常 ;)
web at houhejie dot cn
6 年前
string2array($str)

$arr=json_decode('["fileno",["uid","uname"],"topingid",["touid",[1,2,[3,4]],"touname"]]');
print_r($arr);

輸出
Array ( [0] => fileno [1] => Array ( [0] => uid [1] => uname ) [2] => topingid [3] => Array ( [0] => touid [1] => Array ( [0] => 1 [1] => 2 [2] => Array ( [0] => 3 [1] => 4 ) ) [2] => touname ) )

當我希望有一個 string2array($str) 函式時,「spam2」建議了這個方法。它運作良好~~~希望這能幫助我們,並將其添加到陣列函式列表中。
justin at jmfrazier dot com
4 年前
使用 null 作為鍵值來設定陣列值與使用空 [] 不同。
<?php
$null
= null;
$testArray = [];
$testArray[$null] = 1;
$testArray[$null] = 2;
$testArray[$null] = 3;
$testArray[$null] = 4;
var_dump($testArray);
?>
輸出
array(1) {
'' =>
[""] => int(4)
}

<?php
$testArray
= [];
$testArray[null] = 1;
$testArray[null] = 2;
$testArray[null] = 3;
$testArray[null] = 4;
var_dump($testArray);
?>
輸出
array(1) {
'' =>
[""] => int(4)
}

<?php
$testArray
= [];
$testArray[] = 1;
$testArray[] = 2;
$testArray[] = 3;
$testArray[] = 4;
var_dump($testArray);
?>
輸出
array(4) {
[0] =>
[0] => int(1)
[1] =>
[1] => int(2)
[2] =>
[2] => int(3)
[3] =>
[""] => int(4)
}
[3] => int(4)
14 年前
info at curtinsNOSPAMcreations dot com

另一種建立多維陣列的方法是使用 json_decode,看起來更簡潔。(要注意的是,這可能會增加一些額外負擔,但它看起來確實更好。) 當然,您可以根據需要在要解碼的字串中添加任意多層級和格式。別忘了 json 要求值使用雙引號「"」,而不是單引號「'」!! (所以,您不能用雙引號「"」括住 json 字串,並在字串內使用單引號「'」。)

<?php
$myarray
['blah'] = json_decode('[
{"label":"foo","name":"baz"},
{"label":"boop","name":"beep"}
]'
,true);

print_r($myarray)
?>
會回傳

陣列
(
[blah] => 陣列
(
[0] => 陣列
(
[label] => foo
[name] => baz
)

[1] => 陣列
(
[label] => boop
[name] => beep
)
)
)
To Top