來說下php數組的遍歷,可能很多人會質疑,數組的遍歷有啥好說的,一個for循環,不就出來了,其實不然,for循環遍歷php數組是最糟糕的php代碼,下面對比詳細分析下。
大家都知道C++,C#在定義數組的時候會在棧區分配連續固定大小的內存空間給數組變量,C++一般用for循環遞增偏移量遍歷數組;C#除了for循環,還可以使用foreach遍歷;那php呢? ?常常會看到下面的程式碼:
<?php $arr = array( 0=>"zxp", 1=>"male", 2=>"北京西三旗" ); for($i=0;$i<count($arr);$i++) { echo $arr[$i]; } ?>
這樣的程式碼暫時沒問題,但是容錯性特低,健壯性特差,一不小心就出錯了。 php數組並不是連續的記憶體空間,無法使用連續的偏移量遍歷數組,且php數組可伸縮,例如上面程式碼$arr插入一個元素$arr[5]=5,for循環肯定要出錯了。
php數組遍歷要使用foreach和while,下邊分別給出這兩種遍歷法
<?php $arr = array( //"comment"=>"personal information", 0=>"zxp", 1=>"male", "age"=>29, 2=>"北京西三旗" ); $arr[4] = "高级开发工程师"; foreach ($arr as $key => $value) { echo $key.':'.$value.'</br>'; } ?>
如上代碼,遍歷的事情交給foreach,遍歷到的數組元素,鍵名賦值給$key,值分配給$key,值分配給$ value。
<?php $arr = array( 0=>"zxp", 1=>"male", "age"=>29, 2=>"北京西三旗" ); reset($arr); while (list($key,$value) = each($arr)) { echo $key.':'.$value.'</br>'; } ?>
如上程式碼,陣列遍歷的事情交給each函數。在使用while循環加list操作加each函數遍歷php數組的時候一定要注意:在while循環前,呼叫下reset函數,將數組指標指向第一個元素,不然,你會發現遍歷出來的元素不夠數目。