php數組合并,拆分,替換,組合

php數組的操作(合并,拆分,刪除,排序)

1. 合并數組

array_merge ( array $array1 [, array $... ] )

array_merge() 將一個或多個數組的單元合并起來,一個數組中的值附加在前一個數組的后面。返回作為結果的數組。

如果輸入的數組中有相同的字符串鍵名,則該鍵名后面的值將覆蓋前一個值。然而,如果數組包含數字鍵名,后面的值將不會覆蓋原來的值,而是附加到后面。

如果只給了一個數組并且該數組是數字索引的,則鍵名會以連續方式重新索引

對比: 如果你想完全保留原有數組并只想新的數組附加到后面,用 + 運算符:

<?php
$array1 = array(0 => 'zero_a', 2 => 'two_a', 3 => 'three_a');
$array2 = array(1 => 'one_b', 3 => 'three_b', 4 => 'four_b');
$result = $array1 + $array2;
var_dump($result);
?>

第一個數組的鍵名將會被保留。在兩個數組中存在相同的鍵名時,第一個數組中的同鍵名的元素將會被保留,第二個數組中的元素將會被忽略,輸出為:

array(5) {
  [0]=>
  string(6) "zero_a"
  [2]=>
  string(5) "two_a"
  [3]=>
  string(7) "three_a"
  [1]=>
  string(5) "one_b"
  [4]=>
  string(6) "four_b"
}

array_combine ( array $keys , array $values )

返回一個 array,用來自 keys 數組的值作為鍵名,來自 values 數組的值作為相應的值。

2. 遞歸地合并數組(追加數組)

array array_merge_recursive ( array $array1 [, array $... ] )

array_merge_recursive() 將一個或多個數組的單元合并起來,一個數組中的值附加在前一個數組的后面。返回作為結果的數組。

如果輸入的數組中有相同的字符串鍵名,則這些值會被合并到一個數組中去,這將遞歸下去,因此如果一個值本身是一個數組,本函數將按照相應的條目把它合并為另一個數組。然而,如果數組具有相同的數組鍵名,后一個值將不會覆蓋原來的值,而是附加到后面。

array_merge 和 array_merge_recursive都是合并數組,區別在于:當某個輸入數組的某個字符串鍵名已經存在要合并的初始數組中時,兩個函數會采取不同的處理方式。array_merge()會覆蓋前面存在的鍵值對,而array_merge_recursive()將兩個值合并在一起行成新的數組,并以原有的鍵作為數組鍵名
官網的例子:

<?php
$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
)

3.數組元素的替換

array array_replace ( array $array1 , array $array2 [, array $... ] )

array_replace() 函數使用后面數組元素相同 key 的值替換 array1 數組的值。如果一個鍵存在于第一個數組同時也存在于第二個數組,它的值將被第二個數組中的值替換。如果一個鍵存在于第二個數組,但是不存在于第一個數組,則會在第一個數組中創建這個元素。如果一個鍵僅存在于第一個數組,它將保持不變。如果傳遞了多個替換數組,它們將被按順序依次處理,后面的數組將覆蓋之前的值。

array_replace() 是非遞歸的:它將第一個數組的值進行替換而不管第二個數組中是什么類型。

同樣也有遞歸替換array_replace_recursive

array array_replace_recursive ( array $array1 , array $array2 [, array $... ] )

array_replace_recursive() 使用后面數組元素的值替換數組 array1 的值。 如果一個鍵存在于第一個數組同時也存在于第二個數組,它的值將被第二個數組中的值替換。 如果一個鍵存在于第二個數組,但是不存在于第一個數組,則會在第一個數組中創建這個元素。 如果一個鍵僅存在于第一個數組,它將保持不變。 如果傳遞了多個替換數組,它們將被按順序依次處理,后面的數組將覆蓋之前的值。

**上面這段話描述了三種情況:

  1. 被替換數組和替換數組存在相同的鍵,被替換數組中對應的值將被替換
  2. 被替換數組中獨有的鍵不受影響
  3. 替換數組中獨有的鍵不會影響被替換數組
    **

array_replace_recursive() 是遞歸的:它將遍歷數組并將相同的處理應用到數組的內部值。

如果數組 array1 中的值是標量,它的值將被第二個數組 array2 中的值替換,它可能是一個標量或者數組。如果 array1 和 array2 中的值都是數組,array_replace_recursive() 函數將遞歸地替換它們各自的值。

<?php
$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
        )

)

Example #2 array_replace_recursive() 及其遞歸表現

<?php
$base = array('citrus' => array("orange") , 'berries' => array("blackberry", "raspberry"), 'others' => 'banana' );
$replacements = array('citrus' => 'pineapple', 'berries' => array('blueberry'), 'others' => array('litchis'));
$replacements2 = array('citrus' => array('pineapple'), 'berries' => array('blueberry'), 'others' => 'litchis');

$basket = array_replace_recursive($base, $replacements, $replacements2);
print_r($basket);

?>
//輸出:
Array
(
    [citrus] => Array
        (
            [0] => pineapple
        )

    [berries] => Array
        (
            [0] => blueberry
            [1] => raspberry
        )

    [others] => litchis
)

4. 拆分數組

array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = false ]] )

array_slice() 返回根據 offset 和 length 參數所指定的 array 數組中的一段序列。
其中offset 和 length 都可為負數。php系統函數的規律:這種情況正數表示順序,負數表示位置

對比: array_splice — 去掉數組中的某一部分并用其它值取代

array_splice ( array &$input , int $offset [, int $length = count($input) [, mixed $replacement = array() ]] )
把 input 數組中由 offset 和 length 指定的單元去掉,如果提供了 replacement 參數,則用其中的單元取代。

注意 input 中的數字鍵名不被保留。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,517評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,087評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,521評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,493評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,207評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,603評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,624評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,813評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,364評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,110評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,305評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,874評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,532評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,953評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,209評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,033評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,268評論 2 375

推薦閱讀更多精彩內容

  • 一、Array_key_exists();檢查給定的鍵名或索引是否存在于數組中二、array_keys ()返回數...
    peng_js閱讀 340評論 0 0
  • PHP常用函數大全 usleep() 函數延遲代碼執行若干微秒。 unpack() 函數從二進制字符串對數據進行解...
    上街買菜丶迷倒老太閱讀 1,380評論 0 20
  • php usleep() 函數延遲代碼執行若干微秒。 unpack() 函數從二進制字符串對數據進行解包。 uni...
    思夢PHP閱讀 1,999評論 1 24
  • 數組的概述 PHP 中的數組實際上是一個有序圖。圖是一種把 values 映射到 keys 的類型。此類型在很多方...
    dptms閱讀 1,622評論 0 4
  • 一、數組操作的基本函數 數組的鍵名和值 array_values($arr);獲得數組的值,返回含所有值的索引數組...
    zshanjun閱讀 789評論 0 2