天天看點

php數組原理周遊原理揭秘

php中的中的數組跟js裡面數組是不大一樣的。php中數組的下标可以整數也可以是字元串,而且數組中元素的順序不是由下标決定的,而是由添加元素的順序。

數組基礎

$arr1 = array(元素1,元素2,。。。。。 );

array(1, 5, 1.1, “abc”, true, false);//可以存儲任何資料,此時為“預設下标”,

array(2=>1, 5=>5, 3=>1.1, 7=>“abc”, 0=>true);//下标可以任意設定(無需順序,無需連續)

array(2=>1, 5, 1=>1.1, “abc”, 0=>true)//可以加下标,也可以不加(預設下标),下标分别是:2,3,1,4,0

//預設下标規則:前面已經用過的最大數字下标+1

array(2=>1, ‘dd’=>5, 1=>1.1, “abc”, 0=>true)//混合下标,同樣遵循預設下标規則

array(-2=>1, ‘dd’=>5, 1.1, “abc”, true);//負數下标不算在整數下标中,而隻當作字元下标

//則最後3項的下标是:0, 1, 2

array(2.7=>1, ‘dd’=>5, 1=>1.1, “abc”, 0=>true);//浮點數下标為自動轉換為整數,且直接抹掉小數

array(“2.7” =>1, ‘dd’=>5, “11”=>1.1, “abc”, true)//純數字字元串下标,當作數字看待,

//則此時下标為:2, ‘dd’, 11, 12, 13

array(2=>1, ‘dd’=>5, true=>1.1, “abc”, false=>true)//布爾值當下标,則true為1,false為0;

array(2=>1, ‘dd’=>5, 2=>1.1, “abc”, true)//如果下标跟前面的重複,則單純覆寫前面同名下标的值

//此時相當于為:array(2=>1.1, ‘dd’=>5, “abc”, true)

其他形式;

$arr1[] = 1;

$arr1[] = 5;

$arr1[] = 1.1;//直接在變量後面使用[],就成為數組,并依次指派。

。。。。

$arr2[‘aa’] = 1;

$arr2[‘bbbcc’] = 5;

$arrr2[5] = 1.1;

。。。。。。。。

這種形式寫的下标,其實跟使用array文法結構幾乎一樣。

取值:通過下标。

指派(同定義):

數組周遊:

周遊基本文法:

foreach( $arr as [ $key => ] $value ) //$key可以稱為鍵變量,$value可以稱為值變量。

{

//這裡就可以對$key 和 $value 進行所有可能的操作——因為他們就是一個變量

//$key 代表每次取得元素的下标,可能是數字,也可以能是字元串

//$value 代表每次取得元素的值,可能是各種類型。

//此循環結構會從數組的第一項一直周遊循環到最後一項,然後結束。

}

數組指針和周遊原理:

每個數組内部都有一個“指針 ”,該指針指定了目前數組取值取到的是某個元素。

其實所謂的周遊就是指針一次移動,然後取值操作。

下面有一個跟指針有關的數組函數:

1、$v1=current($arr) //取到目前數組指針指向的元素的值,沒有則傳回false;

2、$v1 = key($arr) //取到目前數組指針指向的元素的下标,沒有則傳回false;

3、$v1 = prev($arr) //将指針移動到“上一個元素”,并且取到它的值;

4、$v1 = next($arr) //将指針移動到“下一個元素”,并且取到它的值;

5、$v1 = reset($arr) //将指針移動到“第一個元素”,并且取到它的值;

6、$v1 = end($arr) //将指針移動到“最後一個元素”,并且取到它的值

7、$v1 = each($arr) //取得指針目前指向的元素的下标和值,并且将指針移到下一個元素,沒有則傳回false。

for+next+reset周遊數組

php數組原理周遊原理揭秘

while+each+list周遊

說到這個周遊,首先我們要了解一下each和list的功能

each($arr);傳回數組指針目前指向的元素的鍵和值,并且是雙份,并且移動指針到下一位,如果沒有,則傳回false;

所謂的雙份是什麼意思?我們測試一下即可:

php數組原理周遊原理揭秘

結果:

php數組原理周遊原理揭秘

取到了第一個元素的下标和值,各兩份,而且此時數組指針也指向了第二進制素。

list($v1,$v2,$v3……)=$arr list的功能就很奇怪了

php數組原理周遊原理揭秘

php數組原理周遊原理揭秘

依次取得數組中對應索引的值,不過隻能取到數組中索引為0,1,2……這些對應的值。如果索引有重複的,則後面值覆寫前面值。

接下來就可以通過這些進行數組周遊了:

php數組原理周遊原理揭秘

php數組原理周遊原理揭秘

foreach周遊:這個是我們常見的周遊方式,不過這個方式也有一個很特别的地方,當我們周遊過程中對數組進行改變,則會拷貝一個原數組繼續周遊。可能這裡不太好了解,不過看一下例子就明白了。

php數組原理周遊原理揭秘

php數組原理周遊原理揭秘

可見,數組其實已經改變了,但是foreach周遊出來的并沒有增加的哪一項。此時,我們也可以輸出一下目前指針位置:

php數組原理周遊原理揭秘

php數組原理周遊原理揭秘

數組指針停留在了位置3上。由此可以推斷:本來是在原數組上進行周遊的,結果數組發生改變,然後拷貝了一個原數組,在拷貝的數組上完成後面的周遊。

本文由甲爪cpa聯盟整理編輯!

php