PHP怎樣合并多個(gè)數(shù)組 PHP數(shù)組合并的5種方式詳解

要合并多個(gè)php數(shù)組,根據(jù)需求選擇合適的方法:1. array_merge()用于常規(guī)合并,字符串鍵名覆蓋,數(shù)字鍵附加并重新索引;2. array_merge_recursive()遞歸合并,相同字符串鍵名的值合并為數(shù)組;3. “+”運(yùn)算符保留首個(gè)數(shù)組值,忽略后續(xù)同鍵名值;4. array_replace()用后數(shù)組覆蓋前數(shù)組的相同鍵名值;5. array_replace_recursive()遞歸替換,適用于多維數(shù)組。若需高效合并大量數(shù)組,可使用循環(huán)結(jié)合array_push()或直接遍歷賦值。

PHP怎樣合并多個(gè)數(shù)組 PHP數(shù)組合并的5種方式詳解

將多個(gè)PHP數(shù)組合并成一個(gè),方法有很多,選擇哪種取決于你的具體需求。最常見(jiàn)的可能就是array_merge,但它處理鍵名的方式可能和你預(yù)期的不太一樣。還有+運(yùn)算符,它在處理相同鍵名時(shí)又有不同的行為??傊斫馑鼈兊牟町惒拍鼙苊獠瓤?。

PHP怎樣合并多個(gè)數(shù)組 PHP數(shù)組合并的5種方式詳解

array_merge()、array_merge_recursive()、“+”運(yùn)算符、array_replace()、array_replace_recursive()

PHP怎樣合并多個(gè)數(shù)組 PHP數(shù)組合并的5種方式詳解

1. array_merge()

array_merge() 是最常用的方法。它的特點(diǎn)是:

立即學(xué)習(xí)PHP免費(fèi)學(xué)習(xí)筆記(深入)”;

PHP怎樣合并多個(gè)數(shù)組 PHP數(shù)組合并的5種方式詳解

  • 如果數(shù)組具有相同的字符串鍵名,則后面的值將覆蓋前面的值。
  • 如果數(shù)組包含數(shù)字鍵名,則后面的值將不會(huì)覆蓋原來(lái)的值,而是附加到后面,并重新索引。
<?php $array1 = array("color" => "red", 2, 4); $array2 = array("a", "color" => "green", "shape" => "trapezoid", 4); $result = array_merge($array1, $array2); print_r($result); ?> // 輸出 Array (     [color] => green     [0] => 2     [1] => 4     [2] => a     [shape] => trapezoid     [3] => 4 )

可以看到,color 鍵的值被 $array2 中的 green 覆蓋了。數(shù)字鍵則被重新索引并附加到末尾。

2. array_merge_recursive()

這個(gè)函數(shù)是 array_merge() 的遞歸版本。它主要用于處理多維數(shù)組。

  • 如果數(shù)組具有相同的字符串鍵名,則這些值將合并到一個(gè)數(shù)組中。
  • 如果數(shù)組包含數(shù)字鍵名,則后面的值將不會(huì)覆蓋原來(lái)的值,而是附加到后面,并重新索引。
<?php $ar1 = array("color" => array("favorite" => "red"), 5); $ar2 = array(10, "color" => array("favorite" => "green", "blue"), 3); $result = array_merge_recursive($ar1, $ar2); print_r($result); ?> // 輸出 Array (     [color] => Array         (             [favorite] => Array                 (                     [0] => red                     [1] => green                 )              [blue] => blue         )      [0] => 5     [1] => 10     [2] => 3 )

注意 color 鍵的值現(xiàn)在是一個(gè)數(shù)組,包含了 red 和 green。

3. “+” 運(yùn)算符

+ 運(yùn)算符提供了一種更簡(jiǎn)單的數(shù)組合并方式。它的行為是:

  • 如果數(shù)組具有相同的鍵名,則第一個(gè)數(shù)組中的值將被保留,后面的值將被忽略。
<?php $array1 = array("a" => "red", "b" => "green"); $array2 = array("a" => "blue", "c" => "yellow"); $result = $array1 + $array2; print_r($result); ?> // 輸出 Array (     [a] => red     [b] => green     [c] => yellow )

可以看到,$array1 中的 red 被保留,$array2 中的 blue 被忽略。

4. array_replace()

array_replace() 函數(shù)用后面數(shù)組的值替換第一個(gè)數(shù)組的值。

  • 如果數(shù)組具有相同的字符串鍵名,則后面的值將覆蓋前面的值。
  • 如果鍵名只存在于第一個(gè)數(shù)組中,則保留該鍵名和值。
  • 如果鍵名只存在于后面的數(shù)組中,則在該數(shù)組中創(chuàng)建該鍵名和值。
  • 如果傳遞了多個(gè)替換數(shù)組,它們將按順序進(jìn)行處理,后面的數(shù)組將覆蓋前面的值。
<?php $base = array('orange', 'banana', 'apple', 'raspberry'); $replacements = array(0 => 'pineapple', 4 => 'cherry'); $replacements2 = array(0 => 'grape');  $basket = array_replace($base, $replacements, $replacements2); print_r($basket); ?> // 輸出 Array (     [0] => grape     [1] => banana     [2] => apple     [3] => raspberry     [4] => cherry )

5. array_replace_recursive()

array_replace_recursive() 是 array_replace() 的遞歸版本,它特別適用于多維數(shù)組。

  • 如果數(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); ?> // 輸出 Array (     [citrus] => Array         (             [0] => pineapple         )      [berries] => Array         (             [0] => blueberry             [1] => raspberry         )  )

PHP數(shù)組合并時(shí)鍵名沖突了怎么辦?

這取決于你想要的結(jié)果。如果希望后面的值覆蓋前面的值,可以使用 array_merge() 或 array_replace()。如果希望保留第一個(gè)數(shù)組的值,可以使用 + 運(yùn)算符。如果希望將相同鍵名的值合并成一個(gè)數(shù)組,可以使用 array_merge_recursive()。選擇哪個(gè)取決于具體場(chǎng)景。

如何避免PHP數(shù)組合并時(shí)索引被打亂?

array_merge() 在遇到數(shù)字索引時(shí)會(huì)重新索引,這可能會(huì)導(dǎo)致一些問(wèn)題。如果想保留原來(lái)的索引,可以使用 + 運(yùn)算符。但要注意,+ 運(yùn)算符在遇到相同鍵名時(shí)會(huì)保留第一個(gè)數(shù)組的值,而不是像 array_merge() 那樣覆蓋。也可以考慮使用 array_replace(),它會(huì)保留數(shù)字索引,并用后面的數(shù)組的值替換前面的值。

如何高效地合并大量PHP數(shù)組?

如果需要合并大量的數(shù)組,array_merge() 的性能可能不是最好的。在這種情況下,可以考慮使用循環(huán)和 array_push() 來(lái)手動(dòng)合并數(shù)組。雖然代碼稍微復(fù)雜一些,但可以避免 array_merge() 的一些性能開(kāi)銷(xiāo)。不過(guò),在大多數(shù)情況下,array_merge() 的性能已經(jīng)足夠好,除非你真的需要處理非常大的數(shù)組。

<?php $arrays = array(     array('a' => 1, 'b' => 2),     array('c' => 3, 'd' => 4),     array('e' => 5, 'f' => 6) );  $result = array(); foreach ($arrays as $array) {     foreach ($array as $key => $value) {         $result[$key] = $value;     } }  print_r($result); ?>

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊14 分享
站長(zhǎng)的頭像-小浪學(xué)習(xí)網(wǎng)月度會(huì)員