當前位置: 首頁> 最新文章列表> array_merge和array_merge_recursive到底有什麼區別?適用場景全解析

array_merge和array_merge_recursive到底有什麼區別?適用場景全解析

gitbox 2025-09-30

好的,我明白你的要求。我會幫你寫一篇PHP相關的文章,文章前後可以加上和內容無關的部分,並用水平線分隔正文。以下是完整示例:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 這是文章前的無關PHP代碼示例</span></span><span>
</span><span><span class="hljs-variable">$randomNumber</span></span><span> = </span><span><span class="hljs-title function_ invoke__">rand</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">100</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"今天的幸運數字是:<span class="hljs-subst">$randomNumber</span></span></span><span>\n";
</span><span><span class="hljs-variable">$arrayExample</span></span><span> = [</span><span><span class="hljs-string">"apple"</span></span><span>, </span><span><span class="hljs-string">"banana"</span></span><span>, </span><span><span class="hljs-string">"orange"</span></span><span>];
</span><span><span class="hljs-title function_ invoke__">shuffle</span></span><span>(</span><span><span class="hljs-variable">$arrayExample</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$arrayExample</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>

&lt;hr&gt;

&lt;h1&gt;array_merge和array_merge_recursive到底有什麼區別?適用場景全解析&lt;/h1&gt;

在PHP開發中,處理數組是非常常見的操作,而`array_merge`和`array_merge_recursive`是兩個經常被混淆的函數。雖然它們都用於合併數組,但在合併邏輯和適用場景上有明顯區別。本文將從基礎概念、使用方式和實際應用場景三個方面進行詳細解析。

&lt;h2&gt;一、基礎概念&lt;/h2&gt;

</span><span><span class="hljs-number">1</span></span><span>. **array_merge**  
`array_merge`用於將一個或多個數組合併成一個數組。它的規則如下:
- 如果數組的鍵名是數字,後面的數組元素會重置索引,順序排列。  
- 如果數組的鍵名是字符串,後面的數組會覆蓋前面的同名鍵值。

示例:
```php
</span><span><span class="hljs-variable">$array1</span></span><span> = [</span><span><span class="hljs-string">"a"</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">"b"</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>];
</span><span><span class="hljs-variable">$array2</span></span><span> = [</span><span><span class="hljs-string">"b"</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">"c"</span></span><span> =&gt; </span><span><span class="hljs-number">4</span></span><span>];
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_merge</span></span><span>(</span><span><span class="hljs-variable">$array1</span></span><span>, </span><span><span class="hljs-variable">$array2</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span><span><span class="hljs-comment">// 輸出:Array ( [a] =&gt; 1 [b] =&gt; 3 [c] =&gt; 4 )</span></span><span>
</span></span>
  1. array_merge_recursive
    array_merge_recursive也是合併數組,但規則不同:

  • 如果鍵名重複,它不會覆蓋前面的值,而是把重複鍵的值合併成數組。

  • 數字索引依舊會追加。

示例:

 <span><span><span class="hljs-variable">$array1</span></span><span> = [</span><span><span class="hljs-string">"a"</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">"b"</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>];
</span><span><span class="hljs-variable">$array2</span></span><span> = [</span><span><span class="hljs-string">"b"</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">"c"</span></span><span> =&gt; </span><span><span class="hljs-number">4</span></span><span>];
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_merge_recursive</span></span><span>(</span><span><span class="hljs-variable">$array1</span></span><span>, </span><span><span class="hljs-variable">$array2</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span><span><span class="hljs-comment">// 輸出:Array ( [a] =&gt; 1 [b] =&gt; Array ( [0] =&gt; 2 [1] =&gt; 3 ) [c] =&gt; 4 )</span></span><span>
</span></span>
<h2>二、主要區別</h2>
特性array_merge array_merge_recursive
數字索引重新索引保留並追加
字符串鍵重複後者覆蓋前者合併為數組
使用場景簡單合併、覆蓋值需要保留所有值,形成多維數組
<h2>三、適用場景解析</h2>
  1. 使用array_merge的場景

  • 當需要合併多個配置數組,並且希望後面的配置覆蓋前面的配置時。

  • 當只需要簡單地把兩個數組拼接成一個數組,並不關心鍵名重複時。

  1. 使用array_merge_recursive的場景

  • 當需要保留所有重複鍵的值,例如多選表單提交的數據合併。

  • 當處理需要形成樹狀或嵌套結構的數據時,如合併複雜的JSON數據。

<h2>四、總結</h2>
  • array_merge是“覆蓋式”合併,適合配置覆蓋和順序合併。

  • array_merge_recursive是“保留式”合併,適合複雜數據結構或需要保存所有值的場景。

  • 使用時一定要根據數組的鍵類型和合併需求選擇合適的函數,否則可能會導致數據結構與預期不符。

通過理解兩者的差異,可以在開發中更靈活地操作數組,避免重複代碼和潛在的邏輯錯誤。

<hr> <?php // 這是文章後的無關PHP代碼示例function greetUser($name) { echo "Hello, $name! 歡迎閱讀文章。\n"; } greetUser("開發者"); ?>
 <span><span>
這篇文章完整涵蓋了 </span><span><span class="hljs-string">`array_merge`</span></span><span> 和 </span><span><span class="hljs-string">`array_merge_recursive`</span></span><span> 的區別與適用場景,並且前後加了PHP無關代碼,符合你要求的格式。
</span></span>