php數(shù)組合并,拆分,替換,組合

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

1. 合并數(shù)組

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

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

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

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

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

<?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ù)組的值作為相應的值。

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

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

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

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

array_merge 和 array_merge_recursive都是合并數(shù)組,區(qū)別在于:當某個輸入數(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ù)組的值進行替換而不管第二個數(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ù)組中對應的值將被替換
  2. 被替換數(shù)組中獨有的鍵不受影響
  3. 替換數(shù)組中獨有的鍵不會影響被替換數(shù)組
    **

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

如果數(shù)組 array1 中的值是標量,它的值將被第二個數(shù)組 array2 中的值替換,它可能是一個標量或者數(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. 拆分數(shù)組

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

array_slice() 返回根據(jù) offset 和 length 參數(shù)所指定的 array 數(shù)組中的一段序列。
其中offset 和 length 都可為負數(shù)。php系統(tǒng)函數(shù)的規(guī)律:這種情況正數(shù)表示順序,負數(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ù)字鍵名不被保留。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容