PHP 解析PHP中的陣列

2021-09-07 20:54:32 字數 4222 閱讀 7183

目錄結構:

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中允許刪除整個陣列,同時也允許刪除某乙個鍵/值對。

比如:

<?php

echo "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");

?>

輸出結果為:

begin

counts = 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 array

push "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...