PHP 陣列合並

李志成發表於2018-10-07

陣列合並是什麼?
array_merge/array_replace/陣列運算子/array_splice

這次就是說上面的區別的。

1. array_merge

1)該函式,官方解釋:將一個或多個陣列的單元合併起來,一個陣列中的值附加在前一個陣列的後面。
2)如果輸入的陣列中有相同的字串鍵名,則該鍵名後面的值將覆蓋前一個值。然而,如果陣列包含數字鍵名,後面的值將不會覆蓋原來的值,而是附加到後面。(說明不會保留數字索引)
3)如果只給了一個陣列並且該陣列是數字索引的,則鍵名會以連續方式重新索引。(不保留數字索引的結果)

例子:

$array1 = array("color" => "red", 2, 4);
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge($array1, $array2);
print_r($result);
Array
(
    [color] => green
    [0] => 2
    [1] => 4
    [2] => a
    [3] => b
    [shape] => trapezoid
    [4] => 4
)

4)該函式是非遞迴的,如果需要遞迴?array_merge_recursive() 可以做到

2. array_replace

這個函式優點類似,區別在於,他會把數字索引也會進行替換,其他的就與array_merge一樣。
1)也提供了一個遞迴的函式array_replace_recursive()

3. 陣列操作符

是不是有點懵圈?沒聽說過?但是你可能用過

例子 名稱 結果
$a + $b 聯合 $a 和 $b 的聯合。
$a == $b 相等 如果 $a 和 $b 具有相同的鍵/值對則為 TRUE。
$a === $b 全等 如果 $a 和 $b 具有相同的鍵/值對並且順序和型別都相同則為 TRUE。
$a != $b 不等 如果 $a 不等於 $b 則為 TRUE。
$a <> $b 不等 如果 $a 不等於 $b 則為 TRUE。
$a !== $b 不全等 如果 $a 不全等於 $b 則為 TRUE。

其中第一行,"聯合"。這與上面兩個函式的區別是?
區別是相對的,相對於array_replace來說,+操作符會保留第一個陣列的元素,並不會發生替換,是一種補充的關係。而上面更像Mysql中的replace into或者on duplicate update

不過癮?
好,在贈送兩個。array_combineextract

array_combine(array $keys, array $values); 兩個陣列作為引數,並且合併。合併規則是,第一個陣列的值作為合併之後的陣列的鍵名,第二個陣列的元素的值作為合併之後陣列的元素的值。

extract:”拉出“,將陣列匯入到當前符號表。符號表又是什麼鬼?符號表是儲存變數名和變數地址之間的對應關係的地方。就是將陣列元素,變為獨立的變數;其鍵名是變數名,元素值為變數值。

4、array_splice

array_splice只能擷取陣列部分元素,而這個函式可以實現:批量替換,批量刪除和批量插入

官方例子

<?php
// 刪除
$input = array("red", "green", "blue", "yellow");
array_splice($input, 2);
// $input is now array("red", "green")

// 刪除
$input = array("red", "green", "blue", "yellow");
array_splice($input, 1, -1);
// $input is now array("red", "yellow")

// 替換
$input = array("red", "green", "blue", "yellow");
array_splice($input, 1, count($input), "orange");
// $input is now array("red", "orange")

// 替換
$input = array("red", "green", "blue", "yellow");
array_splice($input, -1, 1, array("black", "maroon"));
// $input is now array("red", "green",
//          "blue", "black", "maroon")

// 插入
$input = array("red", "green", "blue", "yellow");
array_splice($input, 3, 0, "purple");
// $input is now array("red", "green",
//          "blue", "purple", "yellow");

5、 作用

說了那麼多,根本不知道這些陣列合並有什麼厲害的地方。
array_replace可以用於陣列的更新和插入,上面說過,這就像是replace into一樣,你可以當陣列是一個小型資料庫。
例子:(名為add,其實可以替換)

public function add(array $parameters = array())
{
        $this->parameters = array_replace($this->parameters, $parameters);
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

有什麼想法歡迎提問或者資訊

相關文章