數組基礎
含義:
數組就是一系列數據的集合體,他們按設定的順序排列為一個「鏈的形狀」。
注意:php中的數組單元的順序,跟下標無關!
數組定義(賦值):
$arr1 = array(3, 11, 5, 18, 2 );//這是最常見的數組,下標為「默認下標」,就是從0開始的整數;
$arr2 = array(「a」=>3, 「bb」=>11, 「cc123」=>5, 『d1』=>18, 『xyz』=>2 );關聯數組,下標為字元串,常見
$arr3 = array(1=>3, 10=>11, 3=>5, 0=>18, 88=>2 );下標可以人為給定;
$arr4 = array(1=>3, 『a1』=>11, 3=>5, 『mn』=>18, 88=>2 );下標可以數字和字元串混合使用;
$arr5 = array(5=>3, 11, 3=>5, 『mn』=>18, 2 ); //有指定下標,也有「自動下標」,
//此時下標為:5,6,3,」mn」, 7
//可見,自動下標為「前面最大數字下標+1」
$arr6 = array(5=>3, 7.7=>11, 3=>5, 『mn』=>18, 2 ); //此時下標為:5,7,3,」mn」, 8
$arr7 = array(5=>3, true=>11, false=>5, 『mn』=>18, 2 ); //此時下標為:5,1,0,」mn」, 6
$arr8 = array(1=>3, 3=>33, true=>11, ); //此時下標為:1,3,其對應值為:11, 33
//下標如果有重複,後面的值覆蓋前面的值;
$arr9 = array(1=>3, -3=>33, 11, ); //此時下標為:1, -3, 2,注意:最後一個逗號「可以有」。
其他一些形式:
$arr10[] = 3;
$arr10[] = 11;
$arr10[] = 5; //該數組下標為0,1,2,常規情況
$arr11[『a』] = 3;
$arr11[『bb』] = 11;
$arr11[『cc123』] = 5; //該數組下標為』a』,』bb』,』cc123』,常規情況
$arr12[1] = 3;
$arr12[] = 11; //此時下標為2
$arr13[『cc123』] = 5; //該數組下標為1,2,』cc123』
特別注意:php中,數組單元的順序,是由其「放入」順序決定,而不是下標。
數組取值:
$v1 = $arr1[0];
$i = 3;
$v2 = $arr1[$i]; //取得數組下標為3的單元的值;
總體上,可以將取得一個數組的單元的值,看組取得一個變數的值完全一樣!!!
數組的分類
按鍵值關係來分:
索引數組:通常認為,如果一個數組的下標是嚴格按照從0開始的連續的整數作為下標,則稱其為索引數組——就是類似js數組的下標。例如:
$arr1 = array(3, 11, 5, 18, 2 );//這是最常見的數組,下標為「默認下標」,就是從0開始的整數;
關聯數組:通常認為,如果一個數組的下標都是一個「字元串」並一定程度上表名了該單元的「含義」,則稱為關聯數組,例如:
$conf = array(
『host』=>」localhost」 ,
『port』=>3306 ,
『username』=>』root』 ,
『password』 => 『123』 ,
);
混合數組:既有數字下標,也有字元下標的情況:
$arr4 = array(1=>3, 『a1』=>11, 3=>5, 『mn』=>18, 88=>2 );下標可以數字和字元串混合使用;
按數組的維數(複雜程度)分:
一維數組:
$a = array(1, 11, 111);
$b = array(2, 22, 222);
$c = array(3, 33, 333);
二維數組:
$dd = array(
array(1, 11, 111),
array(2, 22, 222),
array(3, 33, 333)
);
多維數組:無非就是繼續裡面再用數組代替。
數組的基本使用
求一個一維數組的平均值:

求一個二維數組的平均值:

求一個一維數組的最大值:

求交換一個一維數組的最大值和最小值的位置:


有關數組的交換,再說兩句:
$a = array( 3, 11, 5, 7, 20, 18); //下標是0,1,2,3,4,5
需求1:交換數組第0項和第3項:
$v1 = $a[0];
$v2 = $a[3];
$t = $v1;
$v1 = $v2;
$v2 = $t;//這種做法根本不行,因為v1,v2隻是2個變數,跟數組沒有關係了!
正確的做法是:
$t = $a[0];
$a[0] = $a[3];
$a[3] = $t;
需求2:交換數組首項和末項:
$pos1 = 0; //首項的下標
$pos2 = count($a) – 1; //最後一項的下標
$t = $a[$pos1];
$a[$pos1] = $a[$pos2];
$a[$pos2] = $t;
需求3:交換數組最大項和最小項:
$pos_max = ….; //經過一番計算得到最大項的下標;
$pos_min = ….; //經過一番計算得到最小項的下標
$t = $a[$pos_max];
$a[$pos_max] = $a[$pos_min];
$a[$pos_min] = $t;
數組的遍歷
foreach基本語法
foreach( $數組變數名 as 【$key =>】 $value ){
//循環體;這裡可以去「使用」$key 和 value;
//$key 和 $value 就是該遍歷語句一次次取得的數組的每一個單元(項)的下標和對應值。
//而且,它總是從數組的開頭往後按順序取數據。
}
數組的指針操作及遍歷原理:
首先,看看數組的一個「形象圖」:
$arr4 = array(1=>3, 『a1』=>11, 3=>5, 『mn』=>18, 88=>2 );
可以將其以視覺化的方式理解為:
| 數組下標: | 1 | 「a1」 | 3 | 「mn」 | 88 |
| 對應數據: | 8 | 11 | 5 | 18 | 2 |
其中,該箭頭,就是數組內部的所謂「指針」——注意,不可見,不可輸出,只是一種輔助理解的圖形!
說明:
1,該箭頭,就是數組內部的所謂「指針」
2,默認情況下,該指針指向數組的第一個單元。
3,數組的有關單元的操作,如果沒有指定下標,則就是針對該指針指向的單元的操作。
4,所謂遍歷,其實就是一次次取得當前單元的鍵和值,並放入對應的變數$key, $value,然後移動指針到下一個單元。
則,數組,作為一個「總體數據單位」,有如下指針操作函數可以使用:
1,$v1 = current($數組); //獲得數組的當做指針所在單元的「值」;
2,$v2 = key($數組); //獲得數組的當做指針所在單元的「鍵」(下標);
3,$v3 = next($數組); //先將數組的指針移向下(後)一個單元,然後取得該新單元的值;
4,$v4 = prev($數組); //先將數組的指針移向上(前)一個單元,然後取得該新單元的值;
5,$v5 = end($數組); //先將數組的指針直接移向最後一個單元,然後取得該新單元的值;
6,$v6 = reset($數組); //先將數組的指針直接移向第一個單元,然後取得該新單元的值;

foreache遍歷流程原理圖:
foreach( $數組變數名 as $key => $value ){
//循環體;這裡可以去「使用」$key 和 value;
//$key 和 $value 就是該遍歷語句一次次取得的數組的每一個單元(項)的下標和對應值。
//而且,它總是從數組的開頭往後按順序取數據。
}
其基本原理示意圖如下:


輸出結果為:

可見:遍歷之後,指針已經超出數組合理位置了。
使用for和next遍曆數組
注意:對php數組,往往不能單純使用for循環進行遍歷。
或者說:php中,使用for循環只能循環「下標為連續的純整數數組」;

結果:

each()函數的使用
each()函數的作用:先取得一個數組的「當前單元」的下標和值(並放入一個數組),然後將指針移到下一個單元。
使用形式:
$a = each($數組名); //此時$a就是一個數組了

list()「函數」的使用:
list()函數用於一次性取得一個數組中從0開始的數字下標的多個單元的值!
形式:
list($變數1,$變數2,$變數3, .. ) = $數組;
作用:
上述一行代碼相當於如下代碼:
$變數1 = $數組[0];
$變數2 = $數組[1];
$變數3 = $數組[2];
……..
注意:這裡變數的個數,要跟該數組的數字下標的單元對應,如果某個變數對應的該數字下標不存在,就會報錯!


while+each()+list()遍曆數組

數組變數的一些細節
foreach也是正常的循環語法結構,可以有break和continue等操作。
遍歷過程中值變數默認的傳值方式是值傳遞。

結果為:

遍歷過程中值變數可以人為設定為引用傳遞:foreach($arr as $key => &$value){ … }

結果為:

foreach默認是原數組上進行遍歷。但如果在遍歷過程中對數組進行了某種修改或某種指針性操作,則會複製數組後在複製的數組上繼續遍歷循環(原數組保持不變)。
以下演示的是「foreach默認是原數組上進行遍歷」的效果:

然後,再演示:在某些情況下(修改或指針操作),不是在原數組身上進行遍歷。

結果為:

foreach中如果值變數是引用傳遞,則無論如何都是在原數組上進行。


原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/220697.html
微信掃一掃
支付寶掃一掃