本文內(nèi)容太長(zhǎng)辙纬,如果有被平臺(tái)截?cái)嗷蛉笔С谐瘢?qǐng)參考原文:
PHP函數(shù)參考25-常用數(shù)組函數(shù) - 9ong
PHP函數(shù)參考26-類與對(duì)象相關(guān)函數(shù) - 9ong
-
array_change_key_case — 將數(shù)組中的所有鍵名修改為全大寫或小寫
將 array 數(shù)組中的所有鍵名改為全小寫或大寫悼瓮。本函數(shù)不改變數(shù)字索引。
array_chunk — 將一個(gè)數(shù)組分割成多個(gè)
將一個(gè)數(shù)組分割成多個(gè)數(shù)組囱稽,其中每個(gè)數(shù)組的元素?cái)?shù)目由 size 決定挽懦。最后一個(gè)數(shù)組的元素?cái)?shù)目可能會(huì)少于 size 個(gè)艾恼。
得到的數(shù)組是一個(gè)**多維數(shù)組**中的元素黔姜,其索引從零開始,每一維包含了 size 個(gè)元素蒂萎。
-
array_column — 返回?cái)?shù)組中指定的一列
array_column( array $input, mixed $column_key[, mixed $index_key = null] ) : array
array_column() 返回input數(shù)組中鍵值為column_key的列秆吵,如果指定了可選參數(shù)index_key,那么input數(shù)組中的這一列的值將作為返回?cái)?shù)組中對(duì)應(yīng)值的鍵五慈。
抽取數(shù)組中的一列組成一個(gè)新的數(shù)組纳寂,新數(shù)組的索引可以通過第三個(gè)參數(shù)index_key來指定(從原input二維數(shù)組指定各個(gè)子數(shù)組中的索引key)
$records = array( array( 'id' => 2135, 'first_name' => 'John', 'last_name' => 'Doe', ), array( 'id' => 3245, 'first_name' => 'Sally', 'last_name' => 'Smith', ), array( 'id' => 5342, 'first_name' => 'Jane', 'last_name' => 'Jones', ), array( 'id' => 5623, 'first_name' => 'Peter', 'last_name' => 'Doe', ) ); $last_names = array_column($records, 'last_name', 'id'); print_r($last_names);
從數(shù)組records中抽取各個(gè)子數(shù)組中的列l(wèi)ast_name的值,并使用子數(shù)組中的索引id作為新索引泻拦。
Array ( [2135] => Doe [3245] => Smith [5342] => Jones [5623] => Doe )
-
array_combine — 創(chuàng)建一個(gè)數(shù)組毙芜,用一個(gè)數(shù)組的值作為新數(shù)組的鍵名,另一個(gè)數(shù)組的值作為新數(shù)組的值
注意:返回一個(gè)數(shù)組争拐,要求兩個(gè)數(shù)組的值個(gè)數(shù)要一樣腋粥,否則會(huì)拋出錯(cuò)誤。
-
array_count_values — 統(tǒng)計(jì)數(shù)組中所有的值
統(tǒng)計(jì)數(shù)組中值出現(xiàn)的次數(shù)架曹。
返回一個(gè)數(shù)組:數(shù)組的鍵是 array 里元素值隘冲;數(shù)組的值是 array 元素值出現(xiàn)的次數(shù)。
array_diff — 計(jì)算數(shù)組的差集
返回在source數(shù)組而不在其他數(shù)組中的元素值绑雄,注意元素比較是先轉(zhuǎn)換成字符(string)再進(jìn)行全等===比較展辞,所以該函數(shù)支持一維數(shù)組:
```php
$source = [1, 2, 3, 4,5,6];
$filter1 = [3, 4,];
$filter2 = [5, "6"];
$result = array_diff($source, $filter1,$filter2);
print_r($result);
```
```php
Array
(
[0] => 1
[1] => 2
)
```
注意:支持多個(gè)數(shù)組計(jì)算差集。值檢查數(shù)據(jù)值万牺。
-
array_diff_key — 使用鍵名比較計(jì)算數(shù)組的差集
根據(jù) array1 中的鍵名和 array2 進(jìn)行比較罗珍,返回不同鍵名的項(xiàng)洽腺。本函數(shù)和 array_diff() 相同只除了比較是根據(jù)鍵名而不是值來進(jìn)行的。
注意:同樣是先轉(zhuǎn)換成string后再全等比較key名覆旱,而且只支持一維數(shù)組蘸朋。支持多個(gè)數(shù)組計(jì)算差集。
-
array_diff_ukey — 用回調(diào)函數(shù)對(duì)鍵名比較計(jì)算數(shù)組的差集
array_diff_ukey( array $array1, array $array2[, array $...], callable $key_compare_func) : array
array_diff_ukey() 返回一個(gè)數(shù)組扣唱,該數(shù)組包括了所有出現(xiàn)在 array1 中但是未出現(xiàn)在任何其它參數(shù)數(shù)組中的鍵名的值藕坯。注意關(guān)聯(lián)關(guān)系保留不變。本函數(shù)和 array_diff_key() 相同画舌,除了key比較規(guī)則由第三方函數(shù)來處理堕担。
該函數(shù)滿足用戶自定義對(duì)兩個(gè)數(shù)組的key比較規(guī)則已慢,比如有特殊情況處理曲聂,某個(gè)相同的key被要求保留在差集中。
```php
function key_compare_func($key1, $key2)
{
if ($key1 == $key2)
return 0;
else if ($key1 > $key2)
return 1;
else
return -1;
}
$array1 = ['blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4];
$array2 = ['green' => 5];
$array3 = ['yellow' => 7, 'cyan' => 8, 'blue' => 6];
var_dump(array_diff_ukey($array1, $array2,$array3, 'key_compare_func'));
```
注意:key_compare_func函數(shù)要求比較兩個(gè)key值后佑惠,返回小于朋腋、等于、大于0的整數(shù)膜楷,分別對(duì)應(yīng)第一個(gè)數(shù)組的key小于旭咽、等于、大于第二個(gè)數(shù)組的key赌厅。
-
array_diff_assoc — 帶索引檢查計(jì)算數(shù)組的差集
如果元組的key和value有一個(gè)不一樣就會(huì)返回到差集中穷绵。不再僅僅是比較key或是value。
-
array_diff_uassoc — 用用戶提供的回調(diào)函數(shù)做索引檢查來計(jì)算數(shù)組的差集
注意:回調(diào)函數(shù)只檢查索引值
-
array_udiff — 用回調(diào)函數(shù)比較數(shù)據(jù)來計(jì)算數(shù)組的差集
注意:回調(diào)函數(shù)只檢查數(shù)據(jù)值
array_udiff_assoc — 帶索引檢查計(jì)算數(shù)組的差集特愿,用回調(diào)函數(shù)比較數(shù)據(jù)
array_udiff_uassoc — 帶索引檢查計(jì)算數(shù)組的差集仲墨,用回調(diào)函數(shù)比較數(shù)據(jù)和索引
-
array_fill — 用給定的值填充數(shù)組
用給定的值填充并創(chuàng)建數(shù)組。
array_fill( int $start_index, int $num, mixed $value) : array
array_fill() 用 value 參數(shù)的值將一個(gè)數(shù)組填充 num 個(gè)元素揍障,鍵名由 start_index 參數(shù)指定的開始目养,一般是大于等于0的整數(shù)值。
-
array_fill_keys — 使用指定的鍵和值填充數(shù)組
使用 參數(shù)value 作為值毒嫡,使用 keys 數(shù)組的值作為鍵來填充一個(gè)數(shù)組癌蚁。
$keys = array('foo', 5, 10, 'bar'); $a = array_fill_keys($keys, 'banana'); print_r($a);
Array ( [foo] => banana [5] => banana [10] => banana [bar] => banana )
-
array_filter — 用回調(diào)函數(shù)過濾數(shù)組中的元素
array_filter( array $array[, callable $callback[, int $flag = 0]] ) : array
依次將 array 數(shù)組中的每個(gè)值傳遞到 callback 函數(shù)。如果 callback 函數(shù)返回 true兜畸,則 array 數(shù)組的當(dāng)前值會(huì)被包含在返回的結(jié)果數(shù)組中努释。數(shù)組的鍵名保留不變。
注意:如果沒有提供 callback 函數(shù)咬摇,將刪除 array 中所有等值為 FALSE 的條目洽洁,即空字符串、null菲嘴、0饿自、false等false值都會(huì)被刪除汰翠。
$entry = array( 0 => 'foo', 1 => false, 2 => -1, 3 => null, 4 => '' ); print_r(array_filter($entry));
Array ( [0] => foo [2] => -1 )
注意:第三個(gè)參數(shù)flag默認(rèn)是標(biāo)記傳遞給callback是元素值value,也可以指定ARRAY_FILTER_USE_KEY或ARRAY_FILTER_USE_BOTH來傳遞key或同時(shí)傳遞key與value昭雌。
-
array_flip — 交換數(shù)組中的鍵和值
array_flip() 返回一個(gè)反轉(zhuǎn)后的 array复唤,例如 array 中的鍵名變成了值,而 array 中的值成了鍵名烛卧。
注意 array 中的值需要能夠作為合法的鍵名(例如需要是 int 或者 string)佛纫。如果類型不對(duì),將出現(xiàn)一個(gè)警告总放,并且有問題的鍵/值對(duì)將不會(huì)出現(xiàn)在結(jié)果里呈宇。
如果同一個(gè)值出現(xiàn)多次,則最后一個(gè)鍵名將作為它的值局雄,其它鍵會(huì)被丟棄甥啄。
-
array_intersect — 計(jì)算數(shù)組的交集
array_intersect() 返回一個(gè)數(shù)組,該數(shù)組包含了所有在 array1 中也同時(shí)出現(xiàn)在所有其它參數(shù)數(shù)組中的值炬搭。注意鍵名保留不變蜈漓。
與array_diff原理相似。
array_intersect_key — 使用鍵名比較計(jì)算數(shù)組的交集
array_intersect_ukey — 用回調(diào)函數(shù)比較鍵名來計(jì)算數(shù)組的交集
-
array_intersect_assoc — 帶索引檢查計(jì)算數(shù)組的交集
比較準(zhǔn)確的檢查key和value宫盔,并得到交集
array_intersect_uassoc — 帶索引檢查計(jì)算數(shù)組的交集融虽,用回調(diào)函數(shù)比較索引
array_uintersect — 計(jì)算數(shù)組的交集,用回調(diào)函數(shù)比較數(shù)據(jù)
array_uintersect_assoc — 帶索引檢查計(jì)算數(shù)組的交集灼芭,用回調(diào)函數(shù)比較數(shù)據(jù)
array_uintersect_uassoc — 帶索引檢查計(jì)算數(shù)組的交集有额,用單獨(dú)的回調(diào)函數(shù)比較數(shù)據(jù)和索引
-
array_key_exists — 檢查數(shù)組里是否有指定的鍵名或索引
注意:array_key_exists() 僅僅搜索第一維的鍵。多維數(shù)組里嵌套的鍵不會(huì)被搜索到彼绷。
-
array_key_first — 獲取指定數(shù)組的第一個(gè)鍵值
獲取數(shù)組中的第一個(gè)元素的key巍佑。
注意:php7.3開始支持
-
array_key_last — 獲取一個(gè)數(shù)組的最后一個(gè)鍵值
獲取數(shù)組中的最后一個(gè)元素的key。
注意:php7.3開始支持
-
array_keys — 返回?cái)?shù)組中部分的或所有的鍵名
array_keys( array $array[, mixed $search_value = null[, bool $strict = false]] ) : array
array_keys() 返回 input 數(shù)組中的數(shù)字或者字符串的鍵名苛预。 在7.3之前獲取第一個(gè)或最后一個(gè)元素的key時(shí)句狼,通常我們使用array_keys后再進(jìn)行獲取。
注意:如果指定了可選參數(shù) search_value热某,則只返回該值的鍵名腻菇。否則 input 數(shù)組中的所有鍵名都會(huì)被返回。 這個(gè)功能通常被我們忘記昔馋,這就是我們一直想要的通過value查找key的功能筹吐。
-
array_map — 為數(shù)組的每個(gè)元素應(yīng)用回調(diào)函數(shù)
array_map( callable $callback, array $array, array ...$arrays) : array
這是一個(gè)萬能數(shù)組函數(shù)。返回?cái)?shù)組秘遏,是為 array 每個(gè)元素應(yīng)用 callback函數(shù)之后的數(shù)組丘薛。
array_map() 返回一個(gè) array,數(shù)組內(nèi)容為 array1 的元素按索引順序?yàn)閰?shù)調(diào)用 callback 后的結(jié)果(有更多數(shù)組時(shí)邦危,還會(huì)傳入 arrays 的元素)洋侨。 callback 函數(shù)形參的數(shù)量必須匹配 array_map() 實(shí)參中數(shù)組的數(shù)量舍扰。 也就是說array_map中傳入n個(gè)數(shù)組,則在callback中就會(huì)有n個(gè)參數(shù)希坚,分別對(duì)應(yīng)n個(gè)數(shù)組中每個(gè)數(shù)組的元素值边苹,不考慮key。
callback返回的值將作為新數(shù)組的元素值裁僧,新數(shù)組的key根據(jù)傳入數(shù)組的數(shù)量不同而不同个束,如果只有輸入一個(gè)數(shù)組則保留原有key,如果多個(gè)數(shù)組時(shí)聊疲,則采用新的整數(shù)key值茬底。
-
array_merge — 合并一個(gè)或多個(gè)數(shù)組
array_merge([ array $...] ) : array
將一個(gè)或多個(gè)數(shù)組的元素合并起來,一個(gè)數(shù)組中的值附加在前一個(gè)數(shù)組的后面获洲。返回作為結(jié)果的數(shù)組阱表。
如果輸入的數(shù)組中有相同的字符串鍵名,則該鍵名后面的值將覆蓋前一個(gè)值昌妹。然而捶枢,如果數(shù)組包含數(shù)字鍵名握截,后面的值將 不會(huì) 覆蓋原來的值飞崖,而是附加到后面。
如果輸入的數(shù)組存在以數(shù)字作為索引的內(nèi)容谨胞,則這項(xiàng)內(nèi)容的鍵名會(huì)以連續(xù)方式重新索引固歪。如果像覆蓋后面相同數(shù)字索引的內(nèi)容,可以使用 + 號(hào)胯努,array1 + array2來實(shí)現(xiàn)兩個(gè)數(shù)組的合并牢裳,但同時(shí)覆蓋相同的數(shù)字索引元素。
也就是說 + 號(hào)比起array_merrge的合并更為嚴(yán)格叶沛。
$array1 = array(0 => 'zero_a', 2 => 'two_a', 3 => 'three_a',"a"=>"apple"); $array2 = array(1 => 'one_b', 3 => 'three_b', 4 => 'four_b',"a"=>"app"); $result = $array1 + $array2; //$result = array_merge($array1,$array2); var_dump($result);
array(6) { [0]=> string(6) "zero_a" [2]=> string(5) "two_a" [3]=> string(7) "three_a" ["a"]=> string(5) "apple" [1]=> string(5) "one_b" [4]=> string(6) "four_b" }
-
array_merge_recursive — 遞歸地合并一個(gè)或多個(gè)數(shù)組
array_merge_recursive() 將一個(gè)或多個(gè)數(shù)組的元素合并起來蒲讯,一個(gè)數(shù)組中的值附加在前一個(gè)數(shù)組的后面。返回作為結(jié)果的數(shù)組灰署。
如果輸入的數(shù)組中有相同的字符串鍵名判帮,則這些值會(huì)被合并到一個(gè)數(shù)組中去,這將遞歸下去溉箕,因此如果一個(gè)值本身是一個(gè)數(shù)組晦墙,本函數(shù)將按照相應(yīng)的條目把它合并為另一個(gè)數(shù)組。注意這里肴茄,不是覆蓋晌畅,而是合并到一個(gè)數(shù)組中去,但和array_merge的理解不大一樣寡痰。
注意:如果你想使用這個(gè)函數(shù)抗楔,建議不要從array_merge_recursice字面上來理解棋凳,一定要去看下官方文檔的例子,理解之后才去應(yīng)用到自己的業(yè)務(wù)邏輯中连躏。
同時(shí)注意的是:如果數(shù)組具有相同的數(shù)值鍵名贫橙,后一個(gè)值將不會(huì)覆蓋原來的值,而是附加到后面反粥。
$ar1 = array("color" => array("favorite" => "red"), 5); $ar2 = array(10, "color" => array("favorite" => "green", "blue")); $result = array_merge_recursive($ar1, $ar2); print_r($result);
Array ( [color] => Array ( [favorite] => Array ( [0] => red [1] => green ) [0] => blue ) [0] => 5 [1] => 10 )
-
array_multisort — 對(duì)多個(gè)數(shù)組或多維數(shù)組進(jìn)行排序
這個(gè)函數(shù)一開始是很不好理解的卢肃。特別是他的參數(shù)很靈活多變,可有可無才顿。排序是按字典順序排列的莫湘,官方這句話很不好理解,需要借助例子郑气。
```php
array_multisort( array &$array1[, mixed $array1_sort_order = SORT_ASC[, mixed $array1_sort_flags = SORT_REGULAR[, mixed $...]]] ) : bool
```
先看個(gè)例子:
```php
$arr = [
["10", 11, 100, 100, "a"],
[4,5,2,3,1]
];
array_multisort($arr[0], SORT_ASC, SORT_NUMERIC,
$arr[1], SORT_NUMERIC, SORT_DESC);
print_r($arr);
```
```
Array
(
[0] => Array
(
[0] => a
[1] => 10
[2] => 11
[3] => 100
[4] => 100
)
[1] => Array
(
[0] => 1
[1] => 4
[2] => 5
[3] => 3
[4] => 2
)
)
```
array_multi_sort類似于sql語句的order by排序幅垮,一列值就是一個(gè)一維數(shù)組,上例中尾组,$arr[0]先按數(shù)字升序排序忙芒,$arr[1]在$arr[0]的排序基礎(chǔ)上,根據(jù)$arr[0]中值相同所在的字典key位置讳侨,對(duì)應(yīng)$arr[1]所在字典key位置的值進(jìn)行數(shù)字降序排序呵萨。
比如上例,由于有兩個(gè)100跨跨,key分別是2和3潮峦,對(duì)應(yīng)$arr[1]中key為2和3值為2和3,進(jìn)行數(shù)字降序后就是我們最終看到的輸出結(jié)果勇婴。
注意:多個(gè)數(shù)組排序忱嘹,要保證多個(gè)數(shù)組的元素個(gè)數(shù)是一致的。一般多個(gè)數(shù)組來源于一個(gè)多維數(shù)組的不同key下的值(數(shù)組)耕渴。
關(guān)于該函數(shù)的更多參數(shù)解釋拘悦,詳細(xì)看官方文檔:[PHP: array_multisort - Manual](https://www.php.net/manual/zh/function.array-multisort.php)
-
array_pad — 以指定長(zhǎng)度將一個(gè)值填充進(jìn)數(shù)組
array_pad() 返回 array 的一個(gè)拷貝,并用 value 將其填補(bǔ)到 size 指定的長(zhǎng)度橱脸。如果 size 為正础米,則填補(bǔ)到數(shù)組的右側(cè),如果為負(fù)則從左側(cè)開始填補(bǔ)慰技。如果 size 的絕對(duì)值小于或等于 array 數(shù)組的長(zhǎng)度則沒有任何填補(bǔ)椭盏。
注意:返回的是一個(gè)拷貝,而不是數(shù)組本身也不是引用吻商,也就是說是返回的數(shù)組不影響原數(shù)組掏颊。
注意:size就是新數(shù)組的長(zhǎng)度。
-
array_pop — 彈出數(shù)組最后一個(gè)元素(出棧)
array_pop() 彈出并返回 array 數(shù)組的最后一個(gè)元素,并將數(shù)組 array 的長(zhǎng)度減一乌叶。
-
array_product — 計(jì)算數(shù)組中所有值的乘積
array_product() 以整數(shù)或浮點(diǎn)數(shù)返回一個(gè)數(shù)組中所有值的乘積盆偿。
-
array_push — 將一個(gè)或多個(gè)元素壓入數(shù)組的末尾(入棧)
注意:array_push支持一次壓入多個(gè)元素
注意:如果用 array_push() 來給數(shù)組增加一個(gè)元素,還不如用
value准浴,因?yàn)檫@樣沒有調(diào)用函數(shù)的額外負(fù)擔(dān)事扭。
-
array_rand — 從數(shù)組中隨機(jī)取出一個(gè)或多個(gè)元素
array_rand( array $array[, int $num = 1] ) : mixed
如果只取出一個(gè),array_rand() 返回隨機(jī)元素的鍵名乐横。否則就返回包含隨機(jī)鍵名的數(shù)組求橄。
-
array_reduce — 用回調(diào)函數(shù)迭代地將數(shù)組簡(jiǎn)化為單一的值
array_reduce( array $array, callable $callback[, mixed $initial = NULL] ) : mixed
array_reduce() 將回調(diào)函數(shù) callback 迭代地作用到 array 數(shù)組中的每一個(gè)元素中,從而將數(shù)組簡(jiǎn)化為單一的值葡公。
不同于array_map數(shù)組應(yīng)用函數(shù)罐农,array_reduce的callback允許攜帶上一次迭代的值進(jìn)入下一次迭代,最終簡(jiǎn)化返回一個(gè)簡(jiǎn)單的類型值(非復(fù)合類型)
-
array
輸入的 array催什。
-
callback
callback( mixed
item) : mixed
-
carry
攜帶上次迭代里的值涵亏;如果本次迭代是第一次,那么這個(gè)值是 initial蒲凶。
-
item
攜帶了本次迭代的值气筋。
-
-
initial
如果指定了可選參數(shù) initial,該參數(shù)將在處理開始前使用旋圆,或者當(dāng)處理結(jié)束宠默,數(shù)組為空時(shí)的最后一個(gè)結(jié)果。
function product($carry, $item) { $carry *= $item; return $carry; } $a = array(1, 2, 3, 4, 5); var_dump(array_reduce($a, "product", 10)); // int(1200), = 初始值10**1*2*3*4*5
-
-
array_replace — 使用傳遞的數(shù)組替換第一個(gè)數(shù)組的元素
array_replace() 函數(shù)使用后面數(shù)組元素相同 key 的值替換 array 數(shù)組的值臂聋。
- 如果一個(gè)鍵存在于第一個(gè)數(shù)組同時(shí)也存在于第二個(gè)數(shù)組光稼,它的值將被第二個(gè)數(shù)組中的值替換或南。
- 如果一個(gè)鍵存在于第二個(gè)數(shù)組孩等,但是不存在于第一個(gè)數(shù)組,則會(huì)在第一個(gè)數(shù)組中創(chuàng)建這個(gè)元素采够。
- 如果一個(gè)鍵僅存在于第一個(gè)數(shù)組肄方,它將保持不變。
- 如果傳遞了多個(gè)替換數(shù)組蹬癌,它們將被按順序依次處理权她,后面的數(shù)組將覆蓋之前的值。
- array_replace() 是非遞歸的:它將第一個(gè)數(shù)組的值進(jìn)行替換而不管第二個(gè)數(shù)組中是什么類型逝薪。
array_replace( array $array[, array $replacements] ) : array
-
array_replace_recursive — 使用傳遞的數(shù)組遞歸替換第一個(gè)數(shù)組的元素
array_replace_recursive( array $array1[, array $...] ) : array
array_replace_recursive() 使用后面數(shù)組元素的值替換數(shù)組 array1 的值隅要。
如果一個(gè)鍵存在于第一個(gè)數(shù)組同時(shí)也存在于第二個(gè)數(shù)組,它的值將被第二個(gè)數(shù)組中的值替換董济。
如果一個(gè)鍵存在于第二個(gè)數(shù)組步清,但是不存在于第一個(gè)數(shù)組,則會(huì)在第一個(gè)數(shù)組中創(chuàng)建這個(gè)元素。
如果一個(gè)鍵僅存在于第一個(gè)數(shù)組廓啊,它將保持不變欢搜。
如果傳遞了多個(gè)替換數(shù)組,它們將被按順序依次處理谴轮,后面的數(shù)組將覆蓋之前的值炒瘟。
-
另外array_replace_recursive() 是遞歸的:它將遍歷數(shù)組并將相同的處理應(yīng)用到數(shù)組的內(nèi)部值。
如果第一個(gè)數(shù)組中的值是標(biāo)量第步,它的值將被第二個(gè)數(shù)組中的值替換疮装,它可能是一個(gè)標(biāo)量或者數(shù)組。如果第一個(gè)數(shù)組和第二個(gè)數(shù)組中的值都是數(shù)組粘都,array_replace_recursive() 函數(shù)將遞歸地替換它們各自的值斩个。
$base = array('citrus' => array( "orange") , 'berries' => array("blackberry", "raspberry"), ); $replacements = array('citrus' => array('pineapple'), 'berries' => array('blueberry')); $basket = array_replace_recursive($base, $replacements); print_r($basket); $basket = array_replace($base, $replacements); print_r($basket);
Array ( [citrus] => Array ( [0] => pineapple ) [berries] => Array ( [0] => blueberry [1] => raspberry ) ) Array ( [citrus] => Array ( [0] => pineapple ) [berries] => Array ( [0] => blueberry ) )
-
array_reverse — 返回元素順序相反的數(shù)組
接受數(shù)組 array 作為輸入并返回一個(gè)元素為相反順序的新數(shù)組。
-
array_search — 在數(shù)組中搜索給定的值驯杜,如果成功則返回首個(gè)相應(yīng)的鍵名
array_search( mixed $needle, array $haystack[, bool $strict = false] ) : mixed
官方的解釋:大海撈針受啥,在大海(haystack)中搜索針( needle 參數(shù))。
如果找到了 needle 則返回它的鍵鸽心,否則返回 FALSE滚局。
注意:如果 needle 在 haystack 中出現(xiàn)不止一次,則返回第一個(gè)匹配的鍵顽频。要返回所有匹配值的鍵藤肢,應(yīng)該用 array_keys() 加上可選參數(shù) search_value 來代替。
注意:此函數(shù)可能返回布爾值 FALSE糯景,但也可能返回等同于 FALSE 的非布爾值
-
array_shift — 將數(shù)組開頭的元素移出數(shù)組
將 array 的第一個(gè)元素移出并作為結(jié)果返回嘁圈,將 array 的長(zhǎng)度減一并將所有其它元素向前移動(dòng)一位。所有的數(shù)字鍵名將改為從零開始計(jì)數(shù)蟀淮,文字鍵名將不變最住。
注意:數(shù)字鍵名的reset。
-
array_slice — 從數(shù)組中取出一段
array_slice( array $array, int $offset[, int $length = NULL[, bool $preserve_keys = FALSE]] ) : array
array_slice() 返回根據(jù) offset 和 length 參數(shù)所指定的 array 數(shù)組中的一段序列怠惶。
如果 offset 為負(fù)涨缚,則序列將從 array 中距離末端這么遠(yuǎn)的地方開始。
注意:array_slice() 默認(rèn)會(huì)重新排序并重置數(shù)組的數(shù)字索引策治。你可以通過將 preserve_keys 設(shè)為 TRUE 來改變此行為脓魏。無論本參數(shù)如何設(shè)置,都會(huì)保留字符串的鍵通惫。
-
array_splice — 去掉數(shù)組中的某一部分并用其它值取代
把 input 數(shù)組中由 offset 和 length 指定的元素去掉茂翔,如果提供了 replacement 參數(shù),則用其中的元素取代履腋。
array_splice( array &$input, int $offset[, int $length = count($input)[, mixed $replacement = array()]] ) : array
雖然replacement是mixed珊燎,但建議確保一定是數(shù)組。避免帶來不必要的麻煩。
注意:&$input是個(gè)引用俐末,這是php函數(shù)又一個(gè)讓我們吐槽的地方料按,有些函數(shù)是輸入數(shù)組不是引用,而是返回一個(gè)拷貝數(shù)組卓箫,而有些函數(shù)是引用輸入數(shù)組载矿,導(dǎo)致記憶混亂,必須要有php手冊(cè)伴隨身邊烹卒,或者IDE有足夠語法自動(dòng)補(bǔ)充闷盔。
$input = array("red", "green", "blue", "yellow"); //array_splice($input, 2); array_splice($input, 2,count($input),['b','y']); var_dump($input);
array(4) { [0]=> string(3) "red" [1]=> string(5) "green" [2]=> string(1) "b" [3]=> string(1) "y" }
-
array_sum — 對(duì)數(shù)組中所有值求和
同array_product求數(shù)組乘積
-
array_unique — 移除數(shù)組中重復(fù)的值
看名字我們就知道是去重,但需要注意的是:
鍵名保留不變旅急。而且array_unique() 會(huì)先將值作為字符串排序逢勾,然后對(duì)每個(gè)值只保留第一個(gè)遇到的鍵名,接著忽略所有后面的鍵名藐吮。所以未排序的數(shù)組中同一個(gè)值的第一個(gè)出現(xiàn)的鍵名不一定會(huì)被保留溺拱。
-
array_unshift — 在數(shù)組開頭插入一個(gè)或多個(gè)元素
還有更多相關(guān)函數(shù):array_pop、array_push谣辞、array_shift
-
array_values — 返回?cái)?shù)組中所有的值
返回一個(gè)數(shù)組迫摔。
-
array_walk — 使用用戶自定義函數(shù)對(duì)數(shù)組中的每個(gè)元素做回調(diào)處理
類似于array_map,但array_map會(huì)返回形成新的數(shù)組泥从,而array_walk當(dāng)下就處理元素了句占,沒有返回新的數(shù)組或數(shù)據(jù)。
```php
array_walk( array &$array, callable $callback[, mixed $userdata = NULL] ) : bool
```
通常情況下 callback 接受兩個(gè)參數(shù)躯嫉。array 參數(shù)的值作為第一個(gè)纱烘,鍵名作為第二個(gè)。
如果提供了可選參數(shù) userdata祈餐,將被作為第三個(gè)參數(shù)傳遞給 callback 函數(shù)擂啥。
```php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
function test_print($item2, $key,$prefix='')
{
echo $prefix."_$key: $item2\n";
}
array_walk($fruits, 'test_print', 'fruit');
echo "... and more.\n";
```
```
fruit_d: lemon
fruit_a: orange
fruit_b: banana
fruit_c: apple
... and more.
```
-
array_walk_recursive — 對(duì)數(shù)組中的每個(gè)成員遞歸地應(yīng)用用戶函數(shù)
將用戶自定義函數(shù) callback 應(yīng)用到 array 數(shù)組中的每個(gè)元素。本函數(shù)會(huì)遞歸到更深層的數(shù)組中去昼弟。
遞歸到更深層:始終獲得一個(gè)key和value傳入回調(diào)函數(shù)中處理啤它。不論元素在多維數(shù)組中的哪一維。
注意:任何值為 array 的鍵都不會(huì)被傳遞到回調(diào)函數(shù)中去舱痘。 其他與array_walk函數(shù)一樣。
array — 新建一個(gè)數(shù)組
sort — 對(duì)數(shù)組排序
```php
sort( array &$array[, int $sort_flags = SORT_REGULAR] ) : bool
```
注意:排序比較的是值离赫。
注意:$array是引用芭逝,也就是直接修改了原數(shù)組。
注意:如果兩個(gè)成員值完全相同渊胸,那么它們?cè)谂判驍?shù)組中的相對(duì)順序是未定義的旬盯,也就是說沒有對(duì)下相同的值再次進(jìn)行排序,可能就是隨機(jī)的。
注意:此函數(shù)為 array 中的元素賦與新的數(shù)值鍵名胖翰。這將刪除原有的鍵名接剩,而不是僅僅將鍵名重新排序。
可選的第二個(gè)參數(shù) sort_flags 可以用以下值改變排序的行為:
排序類型標(biāo)記:
- SORT_REGULAR - 正常比較元素詳細(xì)描述參見 比較運(yùn)算符 章節(jié)
- SORT_NUMERIC - 元素被作為數(shù)字來比較
- SORT_STRING - 元素被作為字符串來比較
- SORT_LOCALE_STRING - 根據(jù)當(dāng)前的區(qū)域(locale)設(shè)置來把元素當(dāng)作字符串比較萨咳,可以用 setlocale() 來改變懊缺。
- SORT_NATURAL - 和 natsort() 類似對(duì)每個(gè)元素以"自然的順序"對(duì)字符串進(jìn)行排序。
- SORT_FLAG_CASE - 能夠與 SORT_STRING 或 SORT_NATURAL 合并(OR 位運(yùn)算)培他,不區(qū)分大小寫排序字符串鹃两。
數(shù)組的相關(guān)排序函數(shù)中關(guān)于sort_flags都可以參考這些排序類型標(biāo)記,包括array_mutilsort舀凛。
-
natsort — 用“自然排序”算法對(duì)數(shù)組排序
本函數(shù)實(shí)現(xiàn)了一個(gè)和人們通常對(duì)字母數(shù)字字符串進(jìn)行排序的方法一樣的排序算法并保持原有鍵/值的關(guān)聯(lián)俊扳,這被稱為"自然排序"。
sort()排序結(jié)果: Array ( [3] => img1.png [1] => img10.png [0] => img12.png [2] => img2.png ) natsort()排序結(jié)果: Array ( [3] => img1.png [2] => img2.png [1] => img10.png [0] => img12.png )
natcasesort — 用“自然排序”算法對(duì)數(shù)組進(jìn)行不區(qū)分大小寫字母的排序
rsort — 對(duì)數(shù)組逆向排序
asort — 對(duì)數(shù)組進(jìn)行排序并保持索引關(guān)系
arsort — 對(duì)數(shù)組進(jìn)行逆向排序并保持索引關(guān)系
-
usort — 使用用戶自定義的比較函數(shù)對(duì)數(shù)組中的值進(jìn)行排序
usort( array &$array, callable $value_compare_func) : bool
本函數(shù)將用用戶自定義的比較函數(shù)對(duì)一個(gè)數(shù)組中的值進(jìn)行排序猛遍。如果要排序的數(shù)組需要用一種不尋常的標(biāo)準(zhǔn)進(jìn)行排序馋记,那么應(yīng)該使用此函數(shù)。
回調(diào)函數(shù)中在第一個(gè)參數(shù)小于懊烤,等于或大于第二個(gè)參數(shù)時(shí)抗果,該比較函數(shù)必須相應(yīng)地返回一個(gè)小于,等于或大于 0 的整數(shù)奸晴。
uasort — 使用用戶自定義的比較函數(shù)對(duì)數(shù)組中的值進(jìn)行排序并保持索引關(guān)聯(lián)
uksort — 使用用戶自定義的比較函數(shù)對(duì)數(shù)組中的鍵名進(jìn)行排序
ksort — 對(duì)數(shù)組按照鍵名排序
krsort — 對(duì)數(shù)組按照鍵名逆向排序
compact — 建立一個(gè)數(shù)組冤馏,包括變量名和它們的值
-
count — 計(jì)算數(shù)組中的元素?cái)?shù)目,或?qū)ο笾械膶傩詡€(gè)數(shù)
注意:除了可以統(tǒng)計(jì)數(shù)組外寄啼,還可以統(tǒng)計(jì)對(duì)象逮光。
count函數(shù)有第二個(gè)可選參數(shù)mode,如果 mode 參數(shù)設(shè)為 COUNT_RECURSIVE(或 1)墩划,count() 將遞歸地對(duì)數(shù)組計(jì)數(shù)涕刚。
-
current — 返回?cái)?shù)組中的當(dāng)前元素
每個(gè)數(shù)組中都有一個(gè)內(nèi)部的指針指向它"當(dāng)前的"元素,初始指向插入到數(shù)組中的第一個(gè)元素乙帮。
如果內(nèi)部指針指向超出了元素列表的末端杜漠,current() 返回 FALSE。
$transport = array('foot', 'bike', 'car', 'plane'); echo current($transport),"\n"; // echo 'foot'; echo next($transport),"\n"; // echo 'bike'; echo current($transport),"\n"; // echo 'bike'; echo prev($transport),"\n"; // echo 'foot'; echo end($transport),"\n"; // echo 'plane'; echo current($transport),"\n"; // echo 'plane'; $arr = array(); var_dump(current($arr)); // bool(false) $arr = array(array()); var_dump(current($arr)); // array(0) { }
-
each — 返回?cái)?shù)組中當(dāng)前的鍵/值對(duì)并將數(shù)組指針向前移動(dòng)一步
注意:函數(shù)已自 PHP 7.2.0 起廢棄察净。強(qiáng)烈建議不要使用本函數(shù)驾茴。
-
end — 將數(shù)組的內(nèi)部指針指向最后一個(gè)元素
end() 將 array 的內(nèi)部指針移動(dòng)到最后一個(gè)元素并返回其值。
-
extract — 從數(shù)組中將變量導(dǎo)入到當(dāng)前的符號(hào)表
我們不是很建議使用extract和compact函數(shù)氢卡。
-
in_array — 檢查數(shù)組中是否存在某個(gè)值
in_array( mixed $needle, array $haystack[, bool $strict = FALSE] ) : bool
大海撈針锈至,在大海(haystack)中搜索針( needle),如果沒有設(shè)置 strict 則使用寬松的比較译秦。 如果找到 needle 則返回 TRUE峡捡,否則返回 FALSE击碗。
array_search() - 在數(shù)組中通過搜索給定的值,如果成功則返回首個(gè)相應(yīng)的鍵名
array_key_exists() - 檢查數(shù)組里是否有指定的鍵名或索引
key_exists — 別名 array_key_exists
-
key — 從關(guān)聯(lián)數(shù)組中取得鍵名
key() 返回?cái)?shù)組中當(dāng)前元素的鍵名们拙。
current() 返回?cái)?shù)組中當(dāng)前元素的值稍途。
-
list — 把數(shù)組中的值賦給一組變量
list( mixed $var[, mixed ...$vars] ) : array
像 array() 一樣,這不是真正的函數(shù)砚婆,而是語言結(jié)構(gòu)械拍。 list() 可以在單次操作內(nèi)就為一組變量賦值。
$info = array('coffee', 'brown', 'caffeine'); // 列出所有變量 list($drink, $color, $power) = $info; // 或者讓我們跳到僅第三個(gè) list( , , $power) = $info; // list() 不能對(duì)字符串起作用 list($bar) = "abcde"; var_dump($bar); // NULL
next — 將數(shù)組中的內(nèi)部指針向前移動(dòng)一位
pos — current 的別名
prev — 將數(shù)組的內(nèi)部指針倒回一位
-
range — 根據(jù)范圍創(chuàng)建數(shù)組射沟,包含指定的元素
range( mixed $start, mixed $end[, int|float $step = 1] ) : array
start和end支持單個(gè)字符和整數(shù)殊者。
print_r(range(11, 5)); print_r(range("f","k"));
Array ( [0] => 11 [1] => 10 [2] => 9 [3] => 8 [4] => 7 [5] => 6 [6] => 5 ) Array ( [0] => f [1] => g [2] => h [3] => i [4] => j [5] => k )
-
reset — 將數(shù)組的內(nèi)部指針指向第一個(gè)元素
reset() 將 array 的內(nèi)部指針倒回到第一個(gè)元素并返回第一個(gè)數(shù)組元素的值。
-
shuffle — 打亂數(shù)組
本函數(shù)打亂(隨機(jī)排列元素的順序)一個(gè)數(shù)組验夯。
shuffle( array &$array) : bool
注意:返回true或false猖吴,傳入array是數(shù)組引用。
sizeof — count 的別名
本文內(nèi)容太長(zhǎng)挥转,如果有被平臺(tái)截?cái)嗷蛉笔Ш1危?qǐng)參考原文:
PHP函數(shù)參考25-常用數(shù)組函數(shù) - 9ong
PHP函數(shù)參考26-類與對(duì)象相關(guān)函數(shù) - 9ong