目錄結構:
在這篇文章中,筆者將會介紹PHP中數組的使用,以及一些注意事項。之前筆者已經說過PHP是一門弱語言類型,因此php中的數組使用也比較靈活。
1.創建數組
創建數組的方式有好幾種,比如:
<?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.如果在數組定義中多個單元都使用了同一個鍵名,則只使用了最后一個,之前的都被覆蓋了。
2.刪除數組
PHP中允許刪除整個數組,同時也允許刪除某一個鍵/值對。
比如:
<?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); ?>
輸出結果如下:
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); ?>
輸出結果:
Array
(
[0] => how
[1] => are
[dot] => ,
[2] => you
)
----------------
Array
(
[dot] => ,
[0] => how
[1] => you
)
通過輸出結果可以看出,以字符串為鍵的鍵/值對保留了下來,以數值為鍵的鍵/值對被重新排序。
3.棧結構
上面說過,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
4.常用的數組處理函數
PHP中提供了許多數組處理函數,下面筆者列舉一些常用的:
array each( array array) 返回 array 數組中當前指針位置的鍵/值對並向前移動數組指針
void list ( mixed ...) 通過一個操作給一組變量賦值
array_shift 將數組開頭的單元移出數組
array_unshift 在數組開頭插入一個或多個單元
array_combine 創建一個數組,用一個數組的值作為其鍵名,另一個數組的值作為其值
array_merge 合並一個或多個數組
array_splice 把數組中的一部分去掉並用其它值取代
參考文章: