摘要:數(shù)組原理遍歷原理揭秘?cái)?shù)組原理遍歷原理揭秘可見,數(shù)組其實(shí)已經(jīng)改變了,但是遍歷出來(lái)的并沒有增加的哪一項(xiàng)。此時(shí),我們也可以輸出一下當(dāng)前指針位置數(shù)組原理遍歷原理揭秘?cái)?shù)組原理遍歷原理揭秘?cái)?shù)組指針停留在了位置上。
php中的中的數(shù)組跟js里面數(shù)組是不大一樣的。php中數(shù)組的下標(biāo)可以整數(shù)也可以是字符串,而且數(shù)組中元素的順序不是由下標(biāo)決定的,而是由添加元素的順序。
數(shù)組基礎(chǔ)
$arr1 = array(元素1,元素2,。。。。。 );
array(1, 5, 1.1, “abc”, true, false);//可以存儲(chǔ)任何數(shù)據(jù),此時(shí)為“默認(rèn)下標(biāo)”,
array(2=>1, 5=>5, 3=>1.1, 7=>“abc”, 0=>true);//下標(biāo)可以任意設(shè)定(無(wú)需順序,無(wú)需連續(xù))
array(2=>1, 5, 1=>1.1, “abc”, 0=>true)//可以加下標(biāo),也可以不加(默認(rèn)下標(biāo)),下標(biāo)分別是:2,3,1,4,0
//默認(rèn)下標(biāo)規(guī)則:前面已經(jīng)用過的最大數(shù)字下標(biāo)+1
array(2=>1, ‘dd’=>5, 1=>1.1, “abc”, 0=>true)//混合下標(biāo),同樣遵循默認(rèn)下標(biāo)規(guī)則
array(-2=>1, ‘dd’=>5, 1.1, “abc”, true);//負(fù)數(shù)下標(biāo)不算在整數(shù)下標(biāo)中,而只當(dāng)作字符下標(biāo)
//則最后3項(xiàng)的下標(biāo)是:0, 1, 2
array(2.7=>1, ‘dd’=>5, 1=>1.1, “abc”, 0=>true);//浮點(diǎn)數(shù)下標(biāo)為自動(dòng)轉(zhuǎn)換為整數(shù),且直接抹掉小數(shù)
array(“2.7” =>1, ‘dd’=>5, “11”=>1.1, “abc”, true)//純數(shù)字字符串下標(biāo),當(dāng)作數(shù)字看待,
//則此時(shí)下標(biāo)為:2, ‘dd’, 11, 12, 13
array(2=>1, ‘dd’=>5, true=>1.1, “abc”, false=>true)//布爾值當(dāng)下標(biāo),則true為1,false為0;
array(2=>1, ‘dd’=>5, 2=>1.1, “abc”, true)//如果下標(biāo)跟前面的重復(fù),則單純覆蓋前面同名下標(biāo)的值
//此時(shí)相當(dāng)于為:array(2=>1.1, ‘dd’=>5, “abc”, true)
其他形式;
$arr1[] = 1;
$arr1[] = 5;
$arr1[] = 1.1;//直接在變量后面使用[],就成為數(shù)組,并依次賦值。
。。。。
$arr2[‘a(chǎn)a’] = 1;
$arr2[‘bbbcc’] = 5;
$arrr2[5] = 1.1;
。。。。。。。。
這種形式寫的下標(biāo),其實(shí)跟使用array語(yǔ)法結(jié)構(gòu)幾乎一樣。
取值:通過下標(biāo)。
賦值(同定義):
數(shù)組遍歷:
遍歷基本語(yǔ)法:
foreach( $arr as [ $key => ] $value ) //$key可以稱為鍵變量,$value可以稱為值變量。
{
//這里就可以對(duì)$key 和 $value 進(jìn)行所有可能的操作——因?yàn)樗麄兙褪且粋€(gè)變量
//$key 代表每次取得元素的下標(biāo),可能是數(shù)字,也可以能是字符串
//$value 代表每次取得元素的值,可能是各種類型。
//此循環(huán)結(jié)構(gòu)會(huì)從數(shù)組的第一項(xiàng)一直遍歷循環(huán)到最后一項(xiàng),然后結(jié)束。
}
數(shù)組指針和遍歷原理:
每個(gè)數(shù)組內(nèi)部都有一個(gè)“指針 ”,該指針指定了當(dāng)前數(shù)組取值取到的是某個(gè)元素。
其實(shí)所謂的遍歷就是指針一次移動(dòng),然后取值操作。
下面有一個(gè)跟指針有關(guān)的數(shù)組函數(shù):
1、$v1=current($arr) //取到當(dāng)前數(shù)組指針指向的元素的值,沒有則返回false;
2、$v1 = key($arr) //取到當(dāng)前數(shù)組指針指向的元素的下標(biāo),沒有則返回false;
3、$v1 = prev($arr) //將指針移動(dòng)到“上一個(gè)元素”,并且取到它的值;
4、$v1 = next($arr) //將指針移動(dòng)到“下一個(gè)元素”,并且取到它的值;
5、$v1 = reset($arr) //將指針移動(dòng)到“第一個(gè)元素”,并且取到它的值;
6、$v1 = end($arr) //將指針移動(dòng)到“最后一個(gè)元素”,并且取到它的值
7、$v1 = each($arr) //取得指針當(dāng)前指向的元素的下標(biāo)和值,并且將指針移到下一個(gè)元素,沒有則返回false。
for+next+reset遍歷數(shù)組
php數(shù)組原理遍歷原理揭秘
while+each+list遍歷
說到這個(gè)遍歷,首先我們要了解一下each和list的功能
each($arr);返回?cái)?shù)組指針當(dāng)前指向的元素的鍵和值,并且是雙份,并且移動(dòng)指針到下一位,如果沒有,則返回false;
所謂的雙份是什么意思?我們測(cè)試一下即可:
php數(shù)組原理遍歷原理揭秘
結(jié)果:
php數(shù)組原理遍歷原理揭秘
取到了第一個(gè)元素的下標(biāo)和值,各兩份,而且此時(shí)數(shù)組指針也指向了第二元素。
list($v1,$v2,$v3……)=$arr list的功能就很奇怪了
php數(shù)組原理遍歷原理揭秘
php數(shù)組原理遍歷原理揭秘
依次取得數(shù)組中對(duì)應(yīng)索引的值,不過只能取到數(shù)組中索引為0,1,2……這些對(duì)應(yīng)的值。如果索引有重復(fù)的,則后面值覆蓋前面值。
接下來(lái)就可以通過這些進(jìn)行數(shù)組遍歷了:
php數(shù)組原理遍歷原理揭秘
php數(shù)組原理遍歷原理揭秘
foreach遍歷:這個(gè)是我們常見的遍歷方式,不過這個(gè)方式也有一個(gè)很特別的地方,當(dāng)我們遍歷過程中對(duì)數(shù)組進(jìn)行改變,則會(huì)拷貝一個(gè)原數(shù)組繼續(xù)遍歷。可能這里不太好理解,不過看一下例子就明白了。
php數(shù)組原理遍歷原理揭秘
php數(shù)組原理遍歷原理揭秘
可見,數(shù)組其實(shí)已經(jīng)改變了,但是foreach遍歷出來(lái)的并沒有增加的哪一項(xiàng)。此時(shí),我們也可以輸出一下當(dāng)前指針位置:
php數(shù)組原理遍歷原理揭秘
php數(shù)組原理遍歷原理揭秘
數(shù)組指針停留在了位置3上。由此可以推斷:本來(lái)是在原數(shù)組上進(jìn)行遍歷的,結(jié)果數(shù)組發(fā)生改變,然后拷貝了一個(gè)原數(shù)組,在拷貝的數(shù)組上完成后面的遍歷。
本文由甲爪cpa聯(lián)盟整理編輯!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/22430.html
摘要:中基礎(chǔ)中的三大坑,遍歷,引用機(jī)制,數(shù)組。今天我們?cè)谥v講中的一些奇怪現(xiàn)象。本文適合有一定基礎(chǔ)的。運(yùn)行流程共用一個(gè)結(jié)構(gòu)體開始遍歷數(shù)組,進(jìn)行判斷,拷貝數(shù)組是一個(gè)新的結(jié)構(gòu)體,操作的是新的結(jié)構(gòu)體。那么遍歷數(shù)組時(shí),全程與原數(shù)組無(wú)關(guān)。 PHP中基礎(chǔ)中的三大坑,foreach遍歷,引用機(jī)制&,數(shù)組。 今天我們?cè)谥v講foreach中的一些奇怪現(xiàn)象。 在講解之前,可以先看看我其他相關(guān)的文章,屬于同一個(gè)大的...
摘要:執(zhí)行原理是一門應(yīng)用非常簡(jiǎn)單,開發(fā)效率極高的一門語(yǔ)言,其弱類型的變量能省去程序員大量的定義變量類型轉(zhuǎn)換等的時(shí)間和精力。程序最終被翻譯為一組處理函數(shù)的順序執(zhí)行。只有減為時(shí)才會(huì)真正執(zhí)行銷毀操作。 PHP執(zhí)行原理 php是一門應(yīng)用非常簡(jiǎn)單,開發(fā)效率極高的一門語(yǔ)言,其弱類型的變量能省去程序員大量的定義變量、類型轉(zhuǎn)換等的時(shí)間和精力。它是一種適用于web開發(fā)的動(dòng)態(tài)語(yǔ)言。 1. php設(shè)計(jì)的原理和特點(diǎn)...
摘要:之前,第三方編譯是管理器,是解釋器之后,官方自帶,與模式。又是解釋器,又是管理器以模塊模式運(yùn)行常見配置數(shù)組排序 PHP引用變量 什么是引用變量?如何定義引用變量? 引用意味著用不同的名字訪問同一個(gè)內(nèi)容定義引用變量:使用& 引用變量的工作原理 普通變量的工作原理 $a = range(0,10000); var_dump(memory_get_usage()); //int(7420...
摘要:是一種基于對(duì)象的動(dòng)態(tài)弱類型腳本語(yǔ)言以下簡(jiǎn)稱,是一種解釋型語(yǔ)言,和其他的編程語(yǔ)言不同,如等編譯型語(yǔ)言,這些語(yǔ)言在代碼執(zhí)行前會(huì)進(jìn)行通篇編譯,先編譯成字節(jié)碼機(jī)器碼。然后在執(zhí)行。 JavaScript是一種基于對(duì)象的動(dòng)態(tài)、弱類型腳本語(yǔ)言(以下簡(jiǎn)稱JS),是一種解釋型語(yǔ)言,和其他的編程語(yǔ)言不同,如java/C++等編譯型語(yǔ)言,這些語(yǔ)言在代碼執(zhí)行前會(huì)進(jìn)行通篇編譯,先編譯成字節(jié)碼(機(jī)器碼)。然后在執(zhí)...
閱讀 1904·2021-11-25 09:43
閱讀 1404·2021-11-22 14:56
閱讀 3280·2021-11-22 09:34
閱讀 2009·2021-11-15 11:37
閱讀 2255·2021-09-01 10:46
閱讀 1395·2019-08-30 15:44
閱讀 2293·2019-08-30 13:15
閱讀 2392·2019-08-29 13:07