重新認識php array_merge函數,phparraymerge_PHP教程

來源:互聯網
上載者:User

重新認識php array_merge函數,phparraymerge


重新認識php array_merge函數

今天因一個Bug重新審視了下array_merge()這個函數。

定義:array_merge — 合并一個或多個數組

規範:array array_merge(array $array1 [, array $...])

說明:

1. 將一個或多個數組的單元合并起來,一個數組中的值附加在前一個數組的後面。

2. 如果輸入的數組中有相同的字串鍵名,則該鍵名後面的值將覆蓋前一個值。然而,如果數組包含數字鍵名,後面的值將不會覆蓋原來的值,而是附加到後面。

3. 如果只給了一個數組並且該數組是數字索引的,則鍵名會以連續方式重新索引。

這個函數在手冊中有詳盡樣本,用途也很廣且實用。

今天遇到的一個問題是手冊中有警告的,只是此前沒注意到,導致了一個致命的錯誤。如下:

PHP >= 5.0 版本,array_merge() 只接受array類型的參數。不過可以用強制轉換來合并其它類型。

對於是foreach等代碼產生的陣列變數要注意了,要麼初始化該變數為空白數組,要麼就在合并時做個強制轉換。不然,會有大苦頭吃。因此,保持一個初始設定變數的習慣也是個好事。

PHP中合并數組分成兩種情況

1、如果這兩個數組中有相同的字串鍵名:

<?php  $book1 = array('linux'=>'linux伺服器配置與管理','php'=>'PHP程式設計'); $book2 = array('linux'=>'伺服器配置與管理','jsp'=>'PHP');   $result = array_merge($book1,$book2); print_r($result);?>

輸出為:

Array ( [linux] => 伺服器配置與管理 [php] => PHP程式設計 [jsp] => PHP )


說明,後者將替換前者。但如果使用的是array_merge_recursive()則可保留,並作一個子數組存在。如:

<?php  $book1 = array('linux'=>'linux伺服器配置與管理','php'=>'PHP程式設計'); $book2 = array('linux'=>'伺服器配置與管理','jsp'=>'PHP');   $result = array_merge_recursive($book1,$book2); print_r($result);?>

輸出為:

Array ( [linux] => Array ( [0] => linux伺服器配置與管理 [1] => 伺服器配置與管理 ) [php] => PHP程式設計 [jsp] => PHP )


2、如果這兩個數組中有相同的數值鍵名:

<?php  $book1 = array('linux伺服器配置與管理','PHP程式設計'); $book2 = array('伺服器配置與管理','PHP');   $result = array_merge($book1,$book2); print_r($result);?>

結果是:

Array ( [0] => linux伺服器配置與管理 [1] => PHP程式設計 [2] => 伺服器配置與管理 [3] => PHP )


這時,如果數組中包含相同的數字鍵名,則後面的不會覆蓋前面的值,而是後面的索引值按順序依次增加,附在後邊。明白了嗎,^_^


PHP中有沒有合并數組值的函數(或者小技巧)

1. 最簡單的辦法:使用 +

下列的代碼:

$r1 = array('a'=>1,'b'=>3,'c'=>5,'d'=>7,'e'=>9);
$r2 = array('f'=>2,'g'=>4,'h'=>6,'i'=>8,'j'=>10);
$r = $r1+$r2;
echo '

';
print_r($r);
echo '</pre>';
?>
代碼輸出結果:
Array
(
[a] => 1
[b] => 3
[c] => 5
[d] => 7
[e] => 9
[f] => 2
[g] => 4
[h] => 6
[i] => 8
[j] => 10
)

但這種辦法有個需要注意的地方:兩個關鍵字相同的元素會只保留一個,即$r1+r2,則$r1中的資料保留,這個在特殊場合也可能剛好用上也說不定。

2. 使用array_merge() 函數:

$array1 = array("color" => "red", 2, 4);
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge($array1, $array2);
print_r($result);
?>
代碼輸出結果:
Array
(
[color] => green
[0] => 2
[1] => 4
[2] => a
[3] => b
[shape] => trapezoid
[4] => 4
)
 

php的函數中&是什 如函數: private function test(&$array) {}

這是函數的傳址調用。$array是一個變數,傳給test()的是$array的地址,函數直接改寫$array的內容傳回值
 

http://www.bkjia.com/PHPjc/872374.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/872374.htmlTechArticle重新認識php array_merge函數,phparraymerge 重新認識php array_merge函數 今天因一個Bug重新審視了下array_merge()這個函數。 定義:array_merge — 合并一...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.