目錄結構:php
在這篇文章中,筆者將會介紹PHP中數組的使用,以及一些注意事項。以前筆者已經說過PHP是一門弱語言類型,所以php中的數組使用也比較靈活。數組
建立數組的方式有好幾種,好比:函數
<?php //格式: //$數組變量名[索引值]=資料內容 $foos[0] = "hello "; $foos[1] = "world "; //格式: //array( [key =>] value , ... ) //key 能夠是 integer 或者 string。value 能夠是任意類型。 $foos = array(prefix => "hello ",suffix => "world "); $foos = array(0 => "hello ",suffix => "world "); //也能夠不用指定鍵(key) $foos = array("hello ","world "); //建立多維數組 //格式: //array( // array(...), // array(...), // array(...), // ...); //下面建立一個2行,第一行爲1,2,3,4,5,6,第二行爲1,2,3,4,5,6,7的二維數組。 $flat = array( row1 => array(1,2,3,4,5,6), row2 => array(1,2,3,4,5,6,7) ); ?>
在使用array(...)的形式建立數組時,其中key會有以下的強制轉化要求:
1.包含有合法整型值的字符串會被轉換爲整型。例如鍵名 "8" 實際會被儲存爲 8。可是 "08" 則不會強制轉換,由於其不是一個合法的十進制數值。
2.浮點數會被轉換爲整型,意味着其小數部分會被捨去。例如鍵名 8.7 實際會被儲存爲 8。
3.布爾值會被轉換成整型。即鍵名 true 實際會被儲存爲 1 而鍵名 false 會被儲存爲 0。
4.Null 會被轉換爲空字符串,即鍵名 null 實際會被儲存爲 ""。
5.數組和對象不能被用爲鍵名。堅持這麼作會致使警告:Illegal offset type。
除此以外使用array(...)定義數組還有以下特性:
1.若是對給出的值沒有指定鍵名,則取當前最大的整數索引值,而新的鍵名將是該值加一。若是指定的鍵名已經有了值,則該值會被覆蓋.
2.若是在數組定義中多個單元都使用了同一個鍵名,則只使用了最後一個,以前的都被覆蓋了。spa
PHP中容許刪除整個數組,同時也容許刪除某一個鍵/值對。
好比:.net
<?php echo "begin\n"; $foos = array("how","are","you"); echo("counts = ".count($foos)."\n"); foreach ($foos as $f){ echo($f."\n"); } unset($foos); echo("counts = ".count($foos)."\n"); for($i = 0; $i <= count($foos); $i++){ echo($foos[$i]."\n"); } echo("finish\n"); ?>
輸出結果爲:設計
begin
counts = 3
how
are
you
counts = 0
finish
上面展現了在刪除整個數組後,數組的數量就變成0了。接下筆者將會演示只刪除其中某一個鍵/值對,以及須要注意的地方。指針
<?php $arr = array("how","are","you"); print_r($arr); print("----------------\n"); //清除鍵爲1的鍵/值對 unset($arr[1]); print_r($arr); ?>
輸出結果以下:code
Array
(
[0] => how
[1] => are
[2] => you
)
----------------
Array
(
[0] => how
[2] => you
)
經過這個結果能夠看出,當使用unset()刪除其中某一個鍵/值對時候,其他的鍵不會自動調整編號。很是容易理解這種設計,由於array本質上就是按照鍵/值對進行存儲的,刪除其中一對鍵/值對,就改變其餘鍵/值對的話,確定不符合常理,而且有些鍵更本就不能按照數值大小(字符串)排序。那麼有沒有一種常規的排序方法,可以在刪除數組中的某一鍵/值對後,只把以數值爲鍵的鍵值對從0升序排列呢?答案是確定的,array_multisort(...)就能完成這樣的功能。對象
<?php $arr = array("how","are","dot"=>",","you"); print_r($arr); print("----------------\n"); //清除鍵爲1的鍵/值對 unset($arr[1]); array_multisort($arr); print_r($arr); ?>
輸出結果:blog
Array
(
[0] => how
[1] => are
[dot] => ,
[2] => you
)
----------------
Array
(
[dot] => ,
[0] => how
[1] => you
)
經過輸出結果能夠看出,以字符串爲鍵的鍵/值對保留了下來,以數值爲鍵的鍵/值對被從新排序。
上面說過,PHP中數組的使用很是靈活,一樣能夠用於模擬棧結構。棧結構具備「先進後出」的特色。數組中提供了array_push和array_pop方法。
array_push在尾部添加元素。
array_pop從尾部彈出一個元素。
例如:
<?php $arr = Array(); array_push($arr, "how"); print("push \"how\" into array\n"); array_push($arr, "are"); print("push \"are\" into array\n"); array_push($arr, "you"); print("push \"you\" into array\n"); print("------------------------\n"); print("pop \"".array_pop($arr)."\" from array\n"); print("pop \"".array_pop($arr)."\" from array\n"); print("pop \"".array_pop($arr)."\" from array\n"); ?>
輸出結果爲:
push "how" into array
push "are" into array
push "you" into array
------------------------
pop "you" from array
pop "are" from array
pop "how" from array
PHP中提供了許多數組處理函數,下面筆者列舉一些經常使用的:
array each( array array) 返回 array 數組中當前指針位置的鍵/值對並向前移動數組指針
void list ( mixed ...) 經過一個操做給一組變量賦值
array_shift 將數組開頭的單元移出數組
array_unshift 在數組開頭插入一個或多個單元
array_combine 建立一個數組,用一個數組的值做爲其鍵名,另外一個數組的值做爲其值
array_merge 合併一個或多個數組
array_splice 把數組中的一部分去掉並用其它值取代
參考文章: