【PHP】解析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.若是在數組定義中多個單元都使用了同一個鍵名,則只使用了最後一個,以前的都被覆蓋了。spa

2.刪除數組

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
)

經過輸出結果能夠看出,以字符串爲鍵的鍵/值對保留了下來,以數值爲鍵的鍵/值對被從新排序。

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/

相關文章
相關標籤/搜索