Home  >  Article  >  Backend Development  >  Comparison of the differences between foreach and while loops in php_PHP tutorial

Comparison of the differences between foreach and while loops in php_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 17:16:041155browse

Foreach and while both loop in php, so what is the difference between foreach and while loop? Which one will have better performance? Let me introduce to you the difference and performance comparison between foreach and while loop. If you need to know more Students can refer to it.

In a while loop, Perl will read a line of input, store it in a variable and execute the loop body. Then, it goes back to find other input lines.

In a foreach loop, the entire line of input operators will be executed in the list context (because foreach needs to process the contents of the list line by line). Before the loop can start executing, it must read all the input.

When inputting large-capacity files, using foreach will occupy a lot of memory. The difference between the two will be very obvious. Therefore, the best approach is usually to use the shorthand for a while loop and let it process one line at a time.

Here are some information:

When you want to repeatedly execute certain statements or paragraphs, C# provides 4 different loop statement options for you to use depending on the current task:
. for statement
. foreach statement
. while statement
. do statement

1.for

The for statement is particularly useful when you know in advance how many times an containing statement should be executed. The regular syntax allows inner statements (and loop expressions) to be executed repeatedly while the condition is true:

for (initialization; condition; loop) contains statements

Please note that initialization, conditions, and loops are all optional. If you omit the condition, you can create an infinite loop that requires a jump statement (break or goto) to exit.

The code is as follows Copy code
 代码如下 复制代码

for (;;)
{
break; // 由于某些原因
}

for (;;)

{

break; // for some reason

}

Another important point is that you can add multiple comma-separated statements to all three parameters of the for loop at the same time. For example, you can initialize two variables, have three conditionals, and repeat 4 variables.

2.foreach

A feature that has existed in the Visual Basic language for a long time is the ability to collect enumerations using the For Each statement. C# also has a command for collecting enumerations through the foreach statement:

foreach (type identifier in expression) containing statement

Loop variables are declared by type and identifier, and expressions correspond to collections. The loop variable represents the collection element for which the loop is running.

3.while

The while statement is exactly what you are looking for when you want to execute an enclosed statement 0 or more times:

while (condition) containing statement

The conditional statement - which is also a Boolean expression - controls the number of times the contained statement is executed. You can use break and continue statements to control the execution of statements in a while statement, which operates in exactly the same way as in a for statement.

 代码如下 复制代码

do
{
内含语句
}
while (条件);

4,do The last loop statement available in C# is the do statement. It is very similar to a while statement in that the condition is verified only after the initial loop.
The code is as follows Copy code
do { Contains sentences } while (condition);

The do statement guarantees that the contained statements have been executed at least once, and they continue to be executed as long as the condition evaluates to true. By using the break statement, you can force execution to exit the do block. If you want to skip this loop, use the continue statement.


Performance comparison

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 copies the array when it starts executing. , while while moves the internal indicator directly), but the result is just the opposite.
In the loop, the array "read" operation is performed, so foreach is faster than while:

The code is as follows Copy code
foreach ($array as $value) {
 代码如下 复制代码
foreach ($array as $value) {
echo $value;
}
while (list($key) = each($array)) {
echo $array[$key];
}
echo $value;

}

while (list($key) = each($array)) {
 代码如下 复制代码
foreach ($array as $key => $value) {
echo $array[$key] = $value . '...';
}
while (list($key) = each($array)) {
$array[$key] = $array[$key] . '...';
}
echo $array[$key];

}


The array "writing" operation is performed in the loop, so while is faster than foreach:
The code is as follows Copy code
foreach ($array as $key => $value) {

echo $array[$key] = $value . '...';
}
while (list($key) = each($array)) {
$array[$key] = $array[$key] . '...';
}


Let us first test the time it takes to traverse a one-dimensional array with 50,000 subscripts:

Test platform:
 代码如下 复制代码

/*
* @ Author: Lilov
* @ Homepage: www.bKjia.c0m
* @ E-mail: zhongjiechao@gmail.com
*
*/

$arr = array();
for($i = 0; $i < 50000; $i++){
$arr[] = $i*rand(1000,9999);
}

function GetRunTime()
{
list($usec,$sec)=exp lode(" ",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)

';
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)

';

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)

';
######################################

?>

CPU: P-M 725 Memory: 512M Hard drive: 40G 5400 rpm OS: Windows xp SP2 WEB: apache 2.0.54 php5.0.4 Test code:
The code is as follows Copy code

'; 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)

'; 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)

'; ##################################### ?>

Test results:

Average the three test results:
Corresponds to for, while, foreach
respectively 0.1311650
0.1666853
0.1237440

After repeated tests, the results show that for traversing the same array, foreach is the fastest, and while is the slowest. foreach is about 20% ~ 30% faster than while. Then add the array subscript to 500000 and 5000000 and the test result is the same. But from a principle point of view, 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 executes the The array is 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.


Summary: It is generally believed that foreach involves value copying and will be slower than while, but in fact, if you only read the array in a loop, then foreach is very fast. This is because PHP The copying mechanism adopted is "reference counting, copy-on-write". That is to say, even if a variable is copied in PHP, the initial form is still fundamentally in the form of a reference. Only when the content of the variable changes, will the variable be copied. Real replication will occur. The reason for doing this is to save memory consumption and also improve the efficiency of replication. From this point of view, the efficient read operation of foreach is not difficult to understand. In addition, since foreach is not suitable for processing array write operations, we can draw a conclusion that in most cases, code for array write operations in the form of foreach ($array as $key => $value) should be replaced with while (list($key) = each($array)). The speed difference produced by these techniques may not be obvious in small projects, but in large projects like frameworks, a single request often involves hundreds, thousands, or tens of thousands of array loop operations, and the difference will be significantly magnified.

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/628743.htmlTechArticleForeach and while loops in php, so what is the difference between foreach and while loops and their performance It will be better. Let me introduce to you the difference between foreach and while loop...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn