php數(shù)組合并,拆分芦岂,替換瘪弓,組合

php數(shù)組的操作(合并,拆分禽最,刪除腺怯,排序)

1. 合并數(shù)組

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

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

如果輸入的數(shù)組中有相同的字符串鍵名,則該鍵名后面的值將覆蓋前一個值懦趋。然而晾虑,如果數(shù)組包含數(shù)字鍵名,后面的值將不會覆蓋原來的值仅叫,而是附加到后面帜篇。

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

對比: 如果你想完全保留原有數(shù)組并只想新的數(shù)組附加到后面诫咱,用 + 運(yùn)算符:

<?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);
?>

第一個數(shù)組的鍵名將會被保留笙隙。在兩個數(shù)組中存在相同的鍵名時,第一個數(shù)組中的同鍵名的元素將會被保留坎缭,第二個數(shù)組中的元素將會被忽略,輸出為:

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 數(shù)組的值作為鍵名签钩,來自 values 數(shù)組的值作為相應(yīng)的值。

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

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

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

如果輸入的數(shù)組中有相同的字符串鍵名假消,則這些值會被合并到一個數(shù)組中去柠并,這將遞歸下去,因此如果一個值本身是一個數(shù)組富拗,本函數(shù)將按照相應(yīng)的條目把它合并為另一個數(shù)組臼予。然而,如果數(shù)組具有相同的數(shù)組鍵名啃沪,后一個值將不會覆蓋原來的值粘拾,而是附加到后面。

array_merge 和 array_merge_recursive都是合并數(shù)組创千,區(qū)別在于:當(dāng)某個輸入數(shù)組的某個字符串鍵名已經(jīng)存在要合并的初始數(shù)組中時缰雇,兩個函數(shù)會采取不同的處理方式。array_merge()會覆蓋前面存在的鍵值對追驴,而array_merge_recursive()將兩個值合并在一起行成新的數(shù)組械哟,并以原有的鍵作為數(shù)組鍵名
官網(wǎng)的例子:

<?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.數(shù)組元素的替換

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

array_replace() 函數(shù)使用后面數(shù)組元素相同 key 的值替換 array1 數(shù)組的值。如果一個鍵存在于第一個數(shù)組同時也存在于第二個數(shù)組殿雪,它的值將被第二個數(shù)組中的值替換暇咆。如果一個鍵存在于第二個數(shù)組,但是不存在于第一個數(shù)組丙曙,則會在第一個數(shù)組中創(chuàng)建這個元素爸业。如果一個鍵僅存在于第一個數(shù)組,它將保持不變亏镰。如果傳遞了多個替換數(shù)組扯旷,它們將被按順序依次處理,后面的數(shù)組將覆蓋之前的值索抓。

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

同樣也有遞歸替換array_replace_recursive

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

array_replace_recursive() 使用后面數(shù)組元素的值替換數(shù)組 array1 的值。 如果一個鍵存在于第一個數(shù)組同時也存在于第二個數(shù)組纸兔,它的值將被第二個數(shù)組中的值替換惰瓜。 如果一個鍵存在于第二個數(shù)組,但是不存在于第一個數(shù)組汉矿,則會在第一個數(shù)組中創(chuàng)建這個元素崎坊。 如果一個鍵僅存在于第一個數(shù)組,它將保持不變洲拇。 如果傳遞了多個替換數(shù)組奈揍,它們將被按順序依次處理曲尸,后面的數(shù)組將覆蓋之前的值。

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

  1. 被替換數(shù)組和替換數(shù)組存在相同的鍵男翰,被替換數(shù)組中對應(yīng)的值將被替換
  2. 被替換數(shù)組中獨(dú)有的鍵不受影響
  3. 替換數(shù)組中獨(dú)有的鍵不會影響被替換數(shù)組
    **

array_replace_recursive() 是遞歸的:它將遍歷數(shù)組并將相同的處理應(yīng)用到數(shù)組的內(nèi)部值另患。

如果數(shù)組 array1 中的值是標(biāo)量,它的值將被第二個數(shù)組 array2 中的值替換蛾绎,它可能是一個標(biāo)量或者數(shù)組昆箕。如果 array1 和 array2 中的值都是數(shù)組,array_replace_recursive() 函數(shù)將遞歸地替換它們各自的值租冠。

<?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() 及其遞歸表現(xiàn)

<?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. 拆分?jǐn)?shù)組

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

array_slice() 返回根據(jù) offset 和 length 參數(shù)所指定的 array 數(shù)組中的一段序列鹏倘。
其中offset 和 length 都可為負(fù)數(shù)。php系統(tǒng)函數(shù)的規(guī)律:這種情況正數(shù)表示順序顽爹,負(fù)數(shù)表示位置纤泵。

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

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

注意 input 中的數(shù)字鍵名不被保留。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末肉渴,一起剝皮案震驚了整個濱河市公荧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌黄虱,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件庸诱,死亡現(xiàn)場離奇詭異捻浦,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)桥爽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钠四,“玉大人盗扒,你說我怎么就攤上這事∽喝ィ” “怎么了侣灶?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長缕碎。 經(jīng)常有香客問我褥影,道長,這世上最難降的妖魔是什么咏雌? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任凡怎,我火速辦了婚禮校焦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘统倒。我一直安慰自己寨典,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布房匆。 她就那樣靜靜地躺著耸成,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坛缕。 梳的紋絲不亂的頭發(fā)上墓猎,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機(jī)與錄音赚楚,去河邊找鬼毙沾。 笑死,一個胖子當(dāng)著我的面吹牛宠页,可吹牛的內(nèi)容都是我干的左胞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼举户,長吁一口氣:“原來是場噩夢啊……” “哼烤宙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起俭嘁,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤躺枕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后供填,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拐云,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年近她,在試婚紗的時候發(fā)現(xiàn)自己被綠了叉瘩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡粘捎,死狀恐怖薇缅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情攒磨,我是刑警寧澤泳桦,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站娩缰,受9級特大地震影響蓬痒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一梧奢、第九天 我趴在偏房一處隱蔽的房頂上張望狱掂。 院中可真熱鬧,春花似錦亲轨、人聲如沸趋惨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽器虾。三九已至,卻和暖如春蹦锋,著一層夾襖步出監(jiān)牢的瞬間兆沙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工莉掂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留葛圃,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓憎妙,卻偏偏與公主長得像库正,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子厘唾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評論 2 355

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

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