這篇文章帶給大家的內容是關於php中array_merge函數的詳細用法(附實例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
array_merge 這個函數很實用,而且很常用,但是它有一些特性,不注意的話就會造成麻煩。前幾天修改同事程式碼的時候,就出現了這種問題,所以查些資料寫下來。
定義與語法
array array_merge ( array $array1 [, array $... ] )語法很簡單,回傳值是合併後的陣列(不總是你所期望的回傳值)。
實例
<?php // 索引数组 $arr1 = array(0 => 'apple', 1 => 'banana'); $arr2 = array(1 => 'pear', 2 => 'orange'); $arr3 = array('pitaya' => '火龙果'); print_r(array_merge($arr1, $arr2));// array_merge会重建索引 Array ( [0] => apple [1] => banana [2] => pear [3] => orange ) echo '<br />'; print_r(array_merge($arr1, $arr2, $arr3));// 索引数组和关联数组合并 Array ( [0] => apple [1] => banana [2] => pear [3] => orange [pitaya] => 火龙果 ) echo '<br />'; // 索引数组不会覆盖,但是使用 + 的话,前面的值会覆盖后面相同索引的值 print_r($arr1 + $arr2);// Array ( [0] => apple [1] => banana [2] => orange ) echo '<br />'; // 关联数组 $arr1 = array('apple' => '苹果', 'banana' => '香蕉'); $arr2 = array('apple' => '黄元帅苹果', 'orange' => '橙子'); print_r(array_merge($arr1, $arr2));// Array ( [apple] => 黄元帅苹果 [banana] => 香蕉 [orange] => 橙子 ) echo '<br />'; // 后面的值会覆盖前面相同key的值,而使用 + 则正好相反,前面的值会覆盖后面的值 print_r($arr1 + $arr2);// Array ( [apple] => 苹果 [banana] => 香蕉 [orange] => 橙子 )
填坑
#那麼 array_merge 所謂的坑是什麼呢?
實際使用中,使用框架從資料庫中查詢數據,傳回的是二維數組或一維數組。但是如果查詢不到數據,回傳的是 null ,這個時候使用 array_merge 的話,就會產生錯誤了。如下
<?php $arr1 = array('apple', 'pear'); $arr2 = null; $arr3 = array_merge($arr1, $arr2); var_dump($arr3); // Warning: array_merge(): Argument #2 is not an array in D:\WWW\test.php on line 6 // NULL
會產生一條 Warning,而 array_merge 的回傳值會是 null。
處理方法不難,只要將參數轉換為陣列即可,可以封裝函數進行處理。要注意的是參數為 false 怎麼處理。如下
<?php /** * 完善 array_merge * 将所有参数转换为数组,null、false 转换为空数组 * @param array ...$args * @return array */ function array_merge_perfect(...$args) { $fun = function ($value) { if ($value === false) { return array(); } return (array)$value; }; // 将所有参数都转换为 array 类型 $arr = array_map($fun, $args); $newArray = array(); foreach ($arr as $key => $value) { $newArray = array_merge($newArray, $value); } return $newArray; } $arr1 = array('test' => array('apple', 'pear'), 'test1' => array('apple', 'pear')); $arr2 = false; $arr3 = null; print_r((array)$arr2);// Array ( [0] => ) echo '<br />'; print_r((array)$arr3);// Array ( ) echo '<br />'; print_r(array_merge_perfect($arr1, $arr2));// Array ( [test] => Array ( [0] => apple [1] => pear ) [test1] => Array ( [0] => apple [1] => pear ) ) echo '<br />'; print_r(array_merge_perfect($arr1, $arr3));// Array ( [test] => Array ( [0] => apple [1] => pear ) [test1] => Array ( [0] => apple [1] => pear ) ) echo '<br />'; print_r(array_merge_perfect($arr2, $arr3));// Array ( ) echo '<br />';
以上是php中array_merge函數的詳細用法(附實例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!