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ù)組將覆蓋之前的值。
**上面這段話描述了三種情況:
- 被替換數(shù)組和替換數(shù)組存在相同的鍵男翰,被替換數(shù)組中對應(yīng)的值將被替換
- 被替換數(shù)組中獨(dú)有的鍵不受影響
- 替換數(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ù)字鍵名不被保留。