1. 程式人生 > >【PHP】解析PHP中的陣列

【PHP】解析PHP中的陣列

目錄結構:

contents structure [+]
  1. 建立陣列
  2. 刪除陣列
  3. 棧結構
  4. 常用的陣列處理函式

在這篇文章中,筆者將會介紹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(...), // ...); //下面建立一個6行7列的平面二維陣列 $flat = array( row => array
(1,2,3,4,5,6), column => 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 把陣列中的一部分去掉並用其它值取代

參考文章:

http://php.net/