search
HomeBackend DevelopmentPHP TutorialComparison of the differences between foreach and while loops in php_PHP tutorial

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 $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 $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
/* * @ Author: Lilov * @ Homepage: www.bKjia.c0m * @ E-mail: zhongjiechao@gmail.com * */ $arr = array(); for($i = 0; $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 $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)

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

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
PHP Dependency Injection Container: A Quick StartPHP Dependency Injection Container: A Quick StartMay 13, 2025 am 12:11 AM

APHPDependencyInjectionContainerisatoolthatmanagesclassdependencies,enhancingcodemodularity,testability,andmaintainability.Itactsasacentralhubforcreatingandinjectingdependencies,thusreducingtightcouplingandeasingunittesting.

Dependency Injection vs. Service Locator in PHPDependency Injection vs. Service Locator in PHPMay 13, 2025 am 12:10 AM

Select DependencyInjection (DI) for large applications, ServiceLocator is suitable for small projects or prototypes. 1) DI improves the testability and modularity of the code through constructor injection. 2) ServiceLocator obtains services through center registration, which is convenient but may lead to an increase in code coupling.

PHP performance optimization strategies.PHP performance optimization strategies.May 13, 2025 am 12:06 AM

PHPapplicationscanbeoptimizedforspeedandefficiencyby:1)enablingopcacheinphp.ini,2)usingpreparedstatementswithPDOfordatabasequeries,3)replacingloopswitharray_filterandarray_mapfordataprocessing,4)configuringNginxasareverseproxy,5)implementingcachingwi

PHP Email Validation: Ensuring Emails Are Sent CorrectlyPHP Email Validation: Ensuring Emails Are Sent CorrectlyMay 13, 2025 am 12:06 AM

PHPemailvalidationinvolvesthreesteps:1)Formatvalidationusingregularexpressionstochecktheemailformat;2)DNSvalidationtoensurethedomainhasavalidMXrecord;3)SMTPvalidation,themostthoroughmethod,whichchecksifthemailboxexistsbyconnectingtotheSMTPserver.Impl

How to make PHP applications fasterHow to make PHP applications fasterMay 12, 2025 am 12:12 AM

TomakePHPapplicationsfaster,followthesesteps:1)UseOpcodeCachinglikeOPcachetostoreprecompiledscriptbytecode.2)MinimizeDatabaseQueriesbyusingquerycachingandefficientindexing.3)LeveragePHP7 Featuresforbettercodeefficiency.4)ImplementCachingStrategiessuc

PHP Performance Optimization Checklist: Improve Speed NowPHP Performance Optimization Checklist: Improve Speed NowMay 12, 2025 am 12:07 AM

ToimprovePHPapplicationspeed,followthesesteps:1)EnableopcodecachingwithAPCutoreducescriptexecutiontime.2)ImplementdatabasequerycachingusingPDOtominimizedatabasehits.3)UseHTTP/2tomultiplexrequestsandreduceconnectionoverhead.4)Limitsessionusagebyclosin

PHP Dependency Injection: Improve Code TestabilityPHP Dependency Injection: Improve Code TestabilityMay 12, 2025 am 12:03 AM

Dependency injection (DI) significantly improves the testability of PHP code by explicitly transitive dependencies. 1) DI decoupling classes and specific implementations make testing and maintenance more flexible. 2) Among the three types, the constructor injects explicit expression dependencies to keep the state consistent. 3) Use DI containers to manage complex dependencies to improve code quality and development efficiency.

PHP Performance Optimization: Database Query OptimizationPHP Performance Optimization: Database Query OptimizationMay 12, 2025 am 12:02 AM

DatabasequeryoptimizationinPHPinvolvesseveralstrategiestoenhanceperformance.1)Selectonlynecessarycolumnstoreducedatatransfer.2)Useindexingtospeedupdataretrieval.3)Implementquerycachingtostoreresultsoffrequentqueries.4)Utilizepreparedstatementsforeffi

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),