1. 程式人生 > >陣列的分類,定義和遍歷技巧

陣列的分類,定義和遍歷技巧

  一、陣列分類
  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)) ;