摘要:如果輸入的數組中有相同的字符串鍵名,則該鍵名后面的值將覆蓋前一個值。語法很簡單,返回值是合并后的數組并不總是你所期望的返回值。如下會產生一條,并且的返回值會是。要注意的是參數為怎么處理。
導語
array_merge 這個函數很實用,也很常用,但是它有一些特性,不注意的話就會造成麻煩。前幾天修改同事代碼的時候,就出現(xiàn)了這種問題,所以查些資料寫下來。
定義與語法array array_merge ( array $array1 [, array $... ] )
合并一個或多個數組。
如果輸入的數組中有相同的字符串鍵名,則該鍵名后面的值將覆蓋前一個值。然而,如果數組包含數字鍵名,后面的值將不會覆蓋原來的值,而是附加到后面。
語法很簡單,返回值是合并后的數組(并不總是你所期望的返回值)。
實例"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 "填坑
"; print_r(array_merge($arr1, $arr2, $arr3));// 索引數組和關聯(lián)數組合并 Array ( [0] => apple [1] => banana [2] => pear [3] => orange [pitaya] => 火龍果 ) echo "
"; // 索引數組不會覆蓋,但是使用 + 的話,前面的值會覆蓋后面相同索引的值 print_r($arr1 + $arr2);// Array ( [0] => apple [1] => banana [2] => orange ) echo "
"; // 關聯(lián)數組 $arr1 = array("apple" => "蘋果", "banana" => "香蕉"); $arr2 = array("apple" => "黃元帥蘋果", "orange" => "橙子"); print_r(array_merge($arr1, $arr2));// Array ( [apple] => 黃元帥蘋果 [banana] => 香蕉 [orange] => 橙子 ) echo "
"; // 后面的值會覆蓋前面相同key的值,而使用 + 則正好相反,前面的值會覆蓋后面的值 print_r($arr1 + $arr2);// Array ( [apple] => 蘋果 [banana] => 香蕉 [orange] => 橙子 )
那么 array_merge 所謂的坑是什么呢?
實際使用中,使用框架從數據庫中查詢數據,返回的是二維數組或者一維數組。但是如果查詢不到數據,返回的是 null ,這個時候使用 array_merge 的話,就會產生錯誤了。如下
會產生一條 Warning,并且 array_merge 的返回值會是 null。
處理方法不難,只要將參數轉換為數組即可,可以封裝函數進行處理。要注意的是參數為 false 怎么處理。如下$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 "
"; print_r((array)$arr3);// Array ( ) echo "
"; print_r(array_merge_perfect($arr1, $arr2));// Array ( [test] => Array ( [0] => apple [1] => pear ) [test1] => Array ( [0] => apple [1] => pear ) ) echo "
"; print_r(array_merge_perfect($arr1, $arr3));// Array ( [test] => Array ( [0] => apple [1] => pear ) [test1] => Array ( [0] => apple [1] => pear ) ) echo "
"; print_r(array_merge_perfect($arr2, $arr3));// Array ( ) echo "
";
參考資料:array_merge、數組轉換、可變參數。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://m.hztianpu.com/yun/29970.html
在PHP中可以使用array_merge函數和兩個數組相加array+array的方式進行數組合并,但兩者效果并不相同,下面為大家介紹兩者具體的使用區(qū)別. 區(qū)別如下: 1. 當下標為數值時,array_merge()不會覆蓋掉原來的值,但array+array合并數組則會把最先出現(xiàn)的值作為最終結果返回,而把后面的數組擁有相同鍵名的那些值拋棄掉(不是覆蓋). 2. 當下標為字符時,array+ar...
摘要:運算符的優(yōu)先級,是明顯高于,因此先執(zhí)行再執(zhí)行。這里會非常有趣的將轉換成一個數字而且默認去掉了前面的也就是很顯然上面的問題已經說過了數字和字符串類型不一致。 showImg(https://segmentfault.com/img/bVvhhO); 本文翻譯自:https://www.toptal.com/php/interview-questions ,文章所羅列的問題雖然看似簡單,但...
摘要:類型不同導致的問題結果如下我們發(fā)現(xiàn)當為數字的時候,是不會進行去重的導致的類型轉換結果我們發(fā)現(xiàn)通過之后都變成了類型 array_merge 類型不同導致的問題 $a = [1=>php,2=>mysql,3=>redis]; $c = [1=>zabbix,2=>mysql]; $d = array_merge($a,$c); var_dump($d); 結果如下 array(5) {...
閱讀 1398·2021-09-04 16:40
閱讀 3514·2021-07-28 00:13
閱讀 2949·2019-08-30 11:19
閱讀 2671·2019-08-29 12:29
閱讀 3222·2019-08-29 12:24
閱讀 1171·2019-08-26 13:28
閱讀 2458·2019-08-26 12:01
閱讀 3503·2019-08-26 11:35