php陣列原理遍歷原理揭祕

甲爪廣告聯盟發表於2019-02-16

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聯盟整理編輯!

相關文章