php的array,和java是有很大差距的,雖然php的弱類型的設(shè)計(jì)可能會(huì)被很多java、C++的程序員詬病,但是我覺得在數(shù)組容器的設(shè)計(jì)上,php走的比java和C++都要遠(yuǎn)。
java的容器設(shè)計(jì)除了不徹底的問題,其允許存在類C++的數(shù)組的存在,是java語言本身唯一一處不滿足一切皆對(duì)象的存在。
實(shí)際上容器的存在,本身是要降低一定的效率的,可是如果過分強(qiáng)調(diào)效率,為什么不干脆使用機(jī)器碼呢?所以我不太喜歡那些拿php容器設(shè)計(jì)走的過分遠(yuǎn)的觀點(diǎn)。
眾所周知,php的array本身是map。
對(duì)于普通數(shù)組而言,實(shí)際上其內(nèi)部結(jié)構(gòu)是:
$arr1=array(1,2,3,4,5);print_r($arr1,1); Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5)
而對(duì)于我們通常理解的map而言,php內(nèi)部是這么實(shí)現(xiàn)的:
$arr2=array('c'=>1,'y'=>2,'m'=>3);print_r($arr2,1); Array( [c] => 1 [y] => 2 [m] => 3)
對(duì)于數(shù)組合并而言,你可以認(rèn)為php使用了類似于C++的重載功能,重載了加號(hào):
print_r($arr1+$arr2,1);Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [c] => 1 [y] => 2 [m] => 3)
這種數(shù)組合并很方便于你從頭遍歷這個(gè)數(shù)組,因?yàn)樵诤芏鄷r(shí)候你不會(huì)采用隨機(jī)訪問的方式使用數(shù)組,而是從頭遍歷到結(jié)尾。
不過,這里,你容易忽略的一個(gè)問題是,array本質(zhì)就是map。如果兩個(gè)數(shù)組有相同鍵的時(shí)候,是很容易被你忽略的:
$arr1=array(1,2,3,4,5);$arr2=array(7,8,9);$arr3=array('1'=>'c','2'=>'y','3'=>'m','4'=>'z','5'=>'a'); print_r($arr1+$arr2,1); print_r($arr1+$arr3,1); Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5
) Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => a
)
我舉第二個(gè)例子的意思就是告訴你,缺省的時(shí)候,php的鍵是0,1,2,3。
而對(duì)于數(shù)組合并的時(shí)候,對(duì)于已經(jīng)存在的鍵,后面追加的值不會(huì)覆蓋原來的值。
似乎只有最后一句話的價(jià)值比較大。我寫博客就是廢話比較多。
PHP編程鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答
圖片精選