陣列的分類,定義和遍歷技巧
阿新 • • 發佈:2018-12-02
一、陣列分類
1.陣列是由一組有序的值或鍵值對組成的資料結構
2.陣列根據鍵名型別分為:索引陣列 與 關聯陣列 二大類
3.索引陣列:鍵名是元素的位置索引,預設從0開始,採用系統自動處理可以省略鍵名
4.關聯陣列:鍵名是自定義的字串,類似於物件中的屬性列表
//索引陣列: 採用字面量直接定義 $arts = ['亢龍有悔', '飛龍在天', '見龍在田', '鴻漸於陸', '潛龍勿用', '突如其來']; //關聯陣列: 採用字面量直接定義 $swordsman = ['name'=>'郭靖','position'=>'金刀駙馬','skill'=>'降龍十八掌'];
二、陣列定義
1. 整體定義: $arr = [...]
2. 逐個定義: $arr[] = ...
3. 陣列元素可以是字面量,也可以變數,甚至還可以是陣列,從而建立多維陣列
//逐個定義:以新增的方式的來建立陣列
$position = '金刀駙馬';
$swordsman=[];
$swordsman['name'] = '郭靖';
$swordsman['position'] = $position;
$swordsman['skill'] = '降龍十八掌';
三、陣列遍歷
1. for()迴圈:適合遍歷索引陣列
2. while()迴圈
3. foreach()迴圈: 陣列專用,強烈推薦
4. list(),each(),while()配合完成的遍歷,因為each()已不再推薦,所以不再學習
4. 內部指標
1. for()迴圈:
$resl = '';
for($i=0;$i<count($arts);$i++)
{
$resl .=$arts[$i].',';
}
echo rtrim($resl,',').'<hr>'; //去掉最右邊留下來的逗號
2. while()迴圈
$res2 = ''; $i = 0; while($i<count($arts)) { $res2 .= $arts[$i].'-'; $i++; } echo rtrim($res2,'-').'<hr>';
3. foreach()迴圈
//3.foreach
foreach ($arts as $key=>$value)
{
echo $key.'---'.$value.'<br>';
}
4.list(),each(),while()遍歷
list($var1,$var2,...) = [value1, value2,....]:將索引陣列中的值,依次賦給list()中的變數
each($arr):將陣列中的每個元素,拆分鍵和值二部分,並分別以索引和關聯二種方式返回
//測試each()
$arr = [100,'name'=>'DonnieKing'];
$temp = each($arr);
echo '<pre>';
print_r($temp);
$temp = each($arr);
echo '<pre>';
print_r($temp);
echo '<hr>';
while(list($key,$value) = each($swordsman))
{
echo $key.'---'.$value.'<br>';
}
echo '<hr>';
5.內部指標
(1)current():當前指標指向元素的值
(2)key(): 當前指標指向元素的鍵名/索引
(3)next(): 指標後移
(4)prev(): 指標前移
(5)end(): 指標移到尾部最後一個元素上
(6)reset(): 指標復位,指向第一個元素
//指標復位
reset($arts);
//獲取第一個元素的鍵值
echo key($arts),'---',current($arts),'<br>';
//後移一位,獲取第二個元素的鍵值
next($arts);
echo key($arts),'---',current($arts),'<br>';
//前移一位
prev($arts);
echo key($arts),'---',current($arts),'<br>';
//移到最後,獲取最後一個元素的鍵值
end($arts);
echo key($arts),'---',current($arts),'<br>';
echo '<hr>';
//記得先復位陣列指標,從頭開始遍歷
reset($arts);
for($i=0;$i<count($arts);$i++)
{
echo key($arts).'---'.current($arts) .'<br>';
next($arts); //指標後移一位
}
//使用while迴圈配置指標進行遍歷
echo '<hr>';
reset($arts);
//使用入口判斷型,會導致第一招丟失
while(next($arts))
{
// prev($arts);
echo key($arts).'---'.current($arts).'<br>';
}
//應該使用出口判斷結構: do ~ while()
echo '<hr>';
reset($arts);
do{
echo key($arts).'---'.current($arts).'<br>';
}while(next($arts)) ;