數組在PHP中是一個非常強大的武器,用起來方便、容易,由於使用起來異常靈活,用它就可以實現數據結構中的鏈表、棧、隊列、堆以及所謂的字典、集合等,也可以轉換成XML格式。
1、使用for
for語句遍歷數組不是一個好選擇,一般不會用,局限性太大,因為數組的下標很多時候不連續,或者是既有整數下標又有字符串下標,但存在這么一個情況,恰好是索引數組,且它的下標是連續的,那么這也是一種方法。
<?php $array = array('a', 'b', 'c', 'd', 'e'); $size = count($array); //取得數組單元個數 for($i=0; $i<$size; $i++) echo $array[$i].'<br/>';
2、使用foreach
foreach比for更方便、靈活,一般用它,使用foreach($arr_name as $value)時,會將數組的元素賦給as關鍵字后面的變量,當然這是針對一維數組而言,還可以將元素所在的鍵名取到,如下方式foreach($arr_name as $key=>$value)即可。
<?php $array = array('os'=>'Linux', 'server'=>'Apache', 'db'=>'mysql', 'language'=>'PHP'); foreach($array as $key=>$value){ echo 'key: '.$key.' --- value: '.$value.'<br/>'; }
運行結果:
3、list、each、while函數結合
each函數每作用於數組一次,指向內部元素的指針遍向后挪動一個單元,每次each返回一個固定格式的鍵/值對數組,具體是(1=>值, 'value'=>值, 0=>鍵, 'key'=>鍵)。下一次each作用時將移動到下一個元素,示例
<?php $arr = array('one'=>'a','two'=>'b', 'three'=>'c'); $lst = each($arr); echo 'each=> <pre>'; var_dump($lst);
效果
list函數的作用是,賦給它一個數組變量,它會將該數組中的以整數為鍵值的元素按鍵值從小到大的順序賦給自己的參數,如果參數不夠填滿參數為止,如果數組中值不夠,則參數被賦為空值,代碼接上
list($key, $val) = $lst; echo '<br/>'; echo 'key: '.$key.' value: '.$val.'<br/>';
效果
還有,如果不想接受前面的元素,還可以用逗號分隔、不傳變量的形式跳過去,具體如
$array = array('a', 'b', 'c'); list(, , $c) = $array; //$c的值為'c'
$lst數組變量中的值,鍵值為整數的分別是前面的1=>'a'和后面的0=>'one,list函數的好處是即便鍵值小的、排在后邊元素也會按照從小到大的順序賦給list函數中的從前到后的參數。
由於each不循環數組,每each作用一下只移動一下指針,到數組末尾返回值為false,於是放在while中就最合適不過了
<?php $arr = array('one'=>'a','two'=>'b', 'three'=>'c'); while(list($key, $val) = each($arr)){ echo $key.' => '.$val.'<br/>'; }
效果
4、使用數組內部指針移動函數
數組內部指針默認指向數組中的第一個元素,函數大致有,current():返回當前指針指向數組中位置的元素值;key():返回當前指針指向數組中位置的元素鍵;next():將指針移動到下一個元素位置;prev():將指針移動到前一個元素位置;reset():將數組指針一到那個到數組第一個元素的位置;end():將數組指針移動到數組最后一個元素的位置。它們作用的參數均為數組變量本身,而結合do...while又可實現數組的順序和逆序遍歷。
<?php echo 'key:'.key($arr).' current:'.current($arr).'<br/>'; //當前鍵和值,默認指向數組第一個元素 next($arr); //后移一個,指向第二個元素 echo 'key:'.key($arr).' current:'.current($arr).'<br/>'; //當前鍵和值 next($arr); //再后移一個,指向第三個元素 echo 'key:'.key($arr).' current:'.current($arr).'<br/>'; //當前鍵和值 prev($arr); //前移一個,指向第二個元素 echo 'key:'.key($arr).' current:'.current($arr).'<br/>'; //當前鍵和值 end($arr); //移動到數組最后一個元素 echo 'key:'.key($arr).' current:'.current($arr).'<br/>'; //當前鍵和值 reset($arr); //移動到數組第一個元素 echo 'key:'.key($arr).' current:'.current($arr).'<br/>'; //當前鍵和值
效果