前些天寫了一篇關於array_merge的函數解析。
今天來看一個新的函數array_combine()
此函數一共有兩個參數,一個是合並后數組的鍵名,另一個為鍵值。
注意:合並后數組的鍵名放在第一個參數位上,鍵值放在第二個參數位上。
兩個參數都是不可缺省的。
兩個參數數組的元素個數一定要相同否則會報錯。
如果其中任意一個參數數組為空同樣也會報錯。
建議:使用此函數時將兩個參數數組均轉為一維數組(詳見示例7)
實踐出真知,讓代碼跑起來吧~
1.array_combine()的正確打開方式:
1 <?php
2 $key = array('boom' , 'tom' , 'jack');
3 $values = array('12' , 'ok' , '1017');
4 $ret = array_combine($key , $values);
5 print_r($ret);
6
7
8 //run result
9
10 Array
11 (
12 [boom] => 12
13 [tom] => ok
14 [jack] => 1017
15 )
2.如果鍵名參數數組的元素相同時會是什么情況?
根據下面的例子我們會發現如果出現相同元素時,后一個會覆蓋掉前一個的值。
在開發過程中這一點尤為重要,因為它會造成數據結果不完整的情況出現。
1 <?php 2 $key = array('boom' , 'tom' , 'tom'); 3 $values = array('12' , 'ok' , '1017'); 4 $ret = array_combine($key , $values); 5 print_r($ret); 6 7 8 //run result 9 Array 10 ( 11 [boom] => 12 12 [tom] => 1017 13 )
根據上面的例子,我不經的想如果兩個參數數組的元素有屬於自己的鍵名會是什么樣的情況呢?
3.當第一個參數數組(合並后數組的鍵名)有自定義鍵名時
根據下面的記過我們會發現和示例1中的結果一樣。
1 <?php
2 $key = array('a' => 'boom' , 'b' => 'tom' , 'c' => 'jack');
3 $values = array('12' , 'ok' , '1017');
4 $ret = array_combine($key , $values);
5 print_r($ret);
6
7 //run result
8
9 Array
10 (
11 [boom] => 12
12 [tom] => ok
13 [jack] => 1017
14 )
4.當第二個參數數組(合並后數組的鍵值)有自定義鍵名時
我們發現和之前的情況是一樣的。
<?php
$key = array('boom' , 'tom' , 'jack');
$values = array('a' => '12' , 'b' => 'ok' , 'c' => '1017');
$ret = array_combine($key , $values);
print_r($ret);
//run result
Array
(
[boom] => 12
[tom] => ok
[jack] => 1017
)
5.當兩個參數數組都擁有自定義鍵名時
<?php
$key = array('1' => 'boom' , '2' => 'tom' , '3' => 'jack');
$values = array('a' => '12' , 'b' => 'ok' , 'c' => '1017');
$ret = array_combine($key , $values);
print_r($ret);
//run result
Array
(
[boom] => 12
[tom] => ok
[jack] => 1017
)
6.此處我們來考慮一種特殊的情況
當鍵值參數中的一個元素為數組時會是什么樣的情況?
其實也不會有太大的變化
它只是把一維數組變為了二維數組而已
因為這個函數一切的變化只受鍵值的影響,與鍵名無關
<?php $key = array('boom' , 'tom' , 'jack'); $values = array('12' , 'ok' , '1017' => array(1,2,3)); $ret = array_combine($key,$values); print_r($ret); //run result Array ( [boom] => 12 [tom] => ok [jack] => Array ( [0] => 1 [1] => 2 [2] => 3 ) )
7.按照示例6中的情況我們來考慮一下鍵名參數數組中一個元素為數組時的結果
根據下面的結果我們會發現
它會將這個元素數組視為一個整體進行合並
注意:此處會有一個notice級別的報錯
這也就是為什么建議統一轉為一維數組來操作的原因
<?php $key = array('boom' , 'tom' , 'jack' => array(1,2,3)); $values = array('12' , 'ok' , '1017'); $ret = array_combine($key,$values); print_r($ret); //run result Array ( [boom] => 12 [tom] => ok [Array] => 1017 ) PHP Notice: Array to string conversion in /usercode/file.php on line 4
綜上所述:array_combine()這個函數的結果只受參數數組鍵值的影響,與鍵名無關。
再者,如果出現參數數組元素相同時會發生覆蓋現象。
使用此函數時,建議參數均轉為一維數組。
本文為茴香餃子博客的原創,歡迎轉載,轉載請注明出處
茴香餃子博客http://www.cnblogs.com/hxjz/
