目錄結構:
contents structure
[-]建立陣列
刪除陣列
棧結構常用的陣列處理函式
在這篇文章中,筆者將會介紹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(...),
// ...);
//下面建立乙個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.如果在陣列定義中多個單元都使用了同乙個鍵名,則只使用了最後乙個,之前的都被覆蓋了。
php中允許刪除整個陣列,同時也允許刪除某乙個鍵/值對。
比如:
<?phpecho "begin\n";
$foos = array("how","are","you");
echo("counts = ".count($foos)."\n");
foreach ($foos
as$f
)unset($foos
);echo("counts = ".count($foos)."\n");
for($i = 0; $i
<= count($foos); $i++)
echo("finish\n");
?>
輸出結果為:
begincounts = 3
howare
youcounts = 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
)
通過輸出結果可以看出,以字串為鍵的鍵/值對保留了下來,以數值為鍵的鍵/值對被重新排序。
上面說過,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 arraypush "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 把陣列中的一部分去掉並用其它值取代
參考文章:
php陣列解析
前言 php的陣列是一直非常強大的資料型別,它的功能包含了常規的資料結構中array,map,set,linked list 等等,具體使用時可根據不同的功能需求而使用對應的函式組合 1.作為陣列使用 索引陣列 定義 arr foo1 foo2 foo3 追加元素 arr foo4 刪除元素 uns...
PHP中的陣列
php 中的陣列實際上是乙個有序對映,對映是一種把 values 關聯到 keys 的型別。php 陣列可以同時含有 integer 和 string 型別的鍵名,因為 php 實際並不區分索引陣列和關聯陣列。鍵 key 可以是乙個整數 integer 或字串 string 值 value 可以是任...
PHP中的陣列
建立乙個空陣列,並把建立的空陣列賦值給變數 arr arr array php有兩種陣列 索引陣列 關聯陣列。索引和關聯兩個詞都是針對陣列的鍵而言的。先介紹下索引陣列,索引陣列是指數組的鍵是整數的陣列,並且鍵的整數順序是從0開始,依次類推。fruit array 蘋果 香蕉 菠蘿 注意陣列的鍵是從0...