Home > Article > Backend Development > PHP array traversal methods and efficiency comparison
This article mainly introduces several methods list(), each() and while in PHP to loop through arrays. The focus of this article is to explain the use of these methods and related efficiency comparisons for those who need it. Friends can refer to it.
foreach traverses the array
When we use an array, we often need to traverse the array and obtain each key or element value. PHP provides some functions that specifically traverse the array. Here we first introduce the usage of foreach array traversal function.
Structural form:
foreach ( array_expression as $value ) statement /* array_expression是要遍历的数组 as作用是将数组的值赋给$value statement是后续语句 */
Example 1:
<?php '白色' , 'black' => '黑色' , 'red' => '红色' , 'green' => '绿色', 'yellow' => '黄色'); foreach( $color as $c) echo $c ." "; ?>
Not only can you get the value of the element but also the key name through foreach, the structural form:
foreach ( array_expression as $key => $value ) statement
Change the code in line 7 of the above example:
foreach( $color as $c) echo $c ."<br>";
to:
foreach( $color as $key => $c) echo $key.$c ."<br>";
for traversal Array
In addition to some predefined array traversal functions in PHP, we can also use the loop feature of the for statement to traverse the array and output it. Examples are given below:
<?php $a[]="张学友"; /* 定义数组 */ $a[]="刘德华"; $a[]="黎明"; $a[]="郭富城"; $s=count($a); /* 统计数组个数 */ for($i=0;$i<$s;$i++){ /* 遍历数组 */ echo $a[$i] ."<br /-->"; /* 显示数组 */ } ?>
while() is used in conjunction with list() and each() to traverse the array
The syntax format used is as follows:
<?php $urls= array('aaa','bbb','ccc','ddd'); while(list($key,$val)= each($urls)) { echo "This Site url is $val.<br />"; } ?>
The following is Test the speed of several array traversals
Generally, there are three methods for traversing an array, for, while, and foreach. The simplest and most convenient of them is foreach. Let's first test the time it takes to traverse a one-dimensional array with 50,000 subscripts.
<?php $arr= array(); for($i= 0; $i< 50000; $i++){ $arr[]= $i*rand(1000,9999); } function GetRunTime() { list($usec,$sec)=explode(" ",microtime()); return ((float)$usec+(float)$sec); } ###################################### $time_start= GetRunTime(); for($i= 0; $i< count($arr); $i++){ $str= $arr[$i]; } $time_end= GetRunTime(); $time_used= $time_end- $time_start; echo 'Used time of for:'.round($time_used, 7).'(s)<br /><br />'; unset($str, $time_start, $time_end, $time_used); ###################################### $time_start= GetRunTime(); while(list($key, $val)= each($arr)){ $str= $val; } $time_end= GetRunTime(); $time_used= $time_end- $time_start; echo 'Used time of while:'.round($time_used, 7).'(s)<br /><br />'; unset($str, $key, $val, $time_start, $time_end, $time_used); ###################################### $time_start= GetRunTime(); foreach($arr as$key=> $val){ $str= $val; } $time_end= GetRunTime(); $time_used= $time_end- $time_start; echo 'Used time of foreach:'.round($time_used, 7).'(s)<br /><br />'; ?>
Test results:
Used time of for:0.0228429(s) Used time of while:0.0544658(s) Used time of foreach:0.0085628(s)
After repeated tests, the results show that for traversing the same array, foreach is the fastest and the slowest is while. In principle, foreach operates on a copy of the array (by copying the array), while while operates by moving the internal index of the array. Generally speaking, it is believed that while should be faster than foreach (because foreach first moves the array when it starts to execute. Copied in, while while moves the internal pointer directly), but the result is just the opposite. The reason should be that foreach is an internal implementation of PHP, while while is a general loop structure. Therefore, in general applications, foreach is simple and efficient. Under PHP5, foreach can also traverse the attributes of a class.
I hope this article will be helpful to everyone.