PHP Array Traversal Knowledge Summary (including traversal method array pointer operation function array traversal speed measurement)

  • 2021-07-06 10:34:15
  • OfStack

1. Introduction of three methods of array traversal

1. foreach()

foreach () is the simplest and most efficient way to traverse the data in an array.

#example1:


<?php
$colors= array('red','blue','green','yellow');
foreach ($colorsas$color){
echo "Do you like $color? <br />";
}
?>

Display results:

Do you like red?
Do you like blue?
Do you like green?
Do you like yellow?

2. while()

while () is usually used in conjunction with list (), each ().

#example2:


<?php
$colors= array('red','blue','green','yellow');
while(list($key,$val)= each($colors)) {
echo "Other list of $val.<br />";
}
?>

Display results:

Other list of red.
Other list of blue.
Other list of green.
Other list of yellow.

3. for()

#example3:


<?php
$arr= array ("0"=> "zero","1"=> "one","2"=> "two");
for ($i= 0;$i< count($arr); $i++){
$str= $arr[$i];
echo "the number is $str.<br />";
}
?>

Display results:

the number is zero.
the number is one.
the number is two.

2. Introduction to array pointer manipulation functions

key()

mixed key(array input_array)

The key () function returns the key element at the current pointer position in input_array.

#example4


<?php
$capitals= array("Ohio"=> "Columbus","Towa"=> "Des Moines","Arizona"=> "Phoenix");
echo "<p>Can you name the capitals of these states?</p>";
while($key= key($capitals)) {
echo $key."<br />";
next($capitals);
// Each key() The call does not advance the pointer. To do this, use the next() Function
}
?>

Display results:

Can you name the capitals of these states?
Ohio
Towa
Arizona

reset()

mixed reset(array input_array)

The reset () function is used to set the pointer to input_array back to the beginning of the array. This function is often used if you need to view or process the same array multiple times in a script, and it is also often used at the end of sorting.

# example5-Append code to # example1


<?php
$colors= array('red','blue','green','yellow');
foreach ($colorsas$color){
echo "Do you like $color? <br />";
}
reset($colors);
while(list($key,$val)= each($colors)) {
echo "$key=> $val<br />";
}
?>

Display results:

Do you like red?
Do you like blue?
Do you like green?
Do you like yellow?
0 = > red
1 = > blue
2 = > green
3 = > yellow

Note: Assigning one array to another resets the original array pointer, so in the above example, if we assign $colors to another variable inside the loop, it will result in an infinite loop.
For example, $s1 = $colors; Add to the while loop, execute the code again, and the browser will display the results endlessly.

each()

array each(array input_array)

The each () function returns the current key/value pair of the input array and advances the pointer one position. The returned array contains four keys, with keys 0 and key containing key names and keys 1 and value containing corresponding data. If the pointer is at the end of the array before each () is executed, FALSE is returned.

#example6


<?php
$capitals= array("Ohio"=> "Columbus","Towa"=> "Des Moines","Arizona"=> "Phoenix");
$s1= each($capitals);
print_r($s1);
?>

Display results:

Array ( [1] = > Columbus [value] = > Columbus [0] = > Ohio [key] = > Ohio )


current (), next (), prev (), end ()

mixed current(array target_array)

The current () function returns the array value at the current pointer position of the target_array array. Unlike the next (), prev (), and end () functions, current () does not move the pointer.
The next () function returns the array value immediately next to the current array pointer.
The prev () function returns the array value at the first position of the current pointer, or FALSE if the pointer is already at the first position of the array.
The end () function moves the pointer to the last 1 position of target_array and returns the last 1 element.


#example7


<?php
$fruits= array("apple","orange","banana");
$fruit= current($fruits); //return "apple"
echo $fruit."<br />";
$fruit= next($fruits); //return "orange"
echo $fruit."<br />";
$fruit= prev($fruits); //return "apple"
echo $fruit."<br />";
$fruit= end($fruits); //return "banana"
echo $fruit."<br />";
?>

Display results:

apple
orange
apple
banana

3. Test the speed of traversing three arrays

In general, there are three ways to traverse an array, for, while and foreach. The simplest and most convenient one is foreach. Let's first test the time it takes to traverse a 1-dimensional array with 50000 subscripts together under 1.

Test environment:
Intel Core Due2 2GHz
2GB 1067MHz DDR3
Mac OS X 10.5.7
Apache 2.0.59
MySQL 5.0.41
PHP 5.2.6


#example8


<?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 foreach is the fastest and while is the slowest for traversing the same array. In principle, foreach operates on a copy of the array (by copying the array), while while operates by moving the internal indicators of the array. Under the general logic, while should be faster than foreach (because foreach copies the array first when it starts execution, while while directly moves the internal indicators.) 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 architecture. Therefore, foreach is simple and efficient in general application. Under PHP5, foreach can also traverse the properties of classes.


Related articles: