PHP函數(shù)參考25-常用數(shù)組函數(shù)

本文內(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è)元素,還不如用 array[] =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 carry, mixeditem) : 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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過簡(jiǎn)信或評(píng)論聯(lián)系作者绑谣。
  • 序言:七十年代末党窜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子借宵,更是在濱河造成了極大的恐慌幌衣,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件壤玫,死亡現(xiàn)場(chǎng)離奇詭異豁护,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)欲间,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門楚里,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人猎贴,你說我怎么就攤上這事班缎。” “怎么了她渴?”我有些...
    開封第一講書人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵达址,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我惹骂,道長(zhǎng)苏携,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任对粪,我火速辦了婚禮右冻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘著拭。我一直安慰自己纱扭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開白布儡遮。 她就那樣靜靜地躺著乳蛾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鄙币。 梳的紋絲不亂的頭發(fā)上肃叶,一...
    開封第一講書人閱讀 51,775評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音十嘿,去河邊找鬼因惭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛绩衷,可吹牛的內(nèi)容都是我干的蹦魔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼咳燕,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼勿决!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起招盲,我...
    開封第一講書人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤低缩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后曹货,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咆繁,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年控乾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了么介。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蜕衡,死狀恐怖壤短,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情慨仿,我是刑警寧澤久脯,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站镰吆,受9級(jí)特大地震影響帘撰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜万皿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一摧找、第九天 我趴在偏房一處隱蔽的房頂上張望核行。 院中可真熱鬧,春花似錦蹬耘、人聲如沸芝雪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽惩系。三九已至,卻和暖如春如筛,著一層夾襖步出監(jiān)牢的瞬間堡牡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來泰國打工杨刨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晤柄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓拭嫁,卻偏偏與公主長(zhǎng)得像可免,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子做粤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

推薦閱讀更多精彩內(nèi)容