【PHP】解析PHP中的數組


目錄結構:

contents structure [-]

在這篇文章中,筆者將會介紹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 把數組中的一部分去掉並用其它值取代

參考文章:

http://php.net/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM