For and foreach difference in php

For and foreach difference in php

lain posted


difference between foreach and each in PHP ?

both should be use for iteration . is each and foreach is identical ? if not identical as respect to functionality than what is difference between each and foreach in PHP ?


foreach($array){
//iteration
}
each($array){
//iteration
}


is each / foreach iterate same way ?
each vs foreach , pros and cons of each and foreach in PHP

For and foreach difference in php

Mitul Dabhi answered Nov 30 '-1 00:00

basic difference between each and foreach is
each is iterate array for one element only and foreach is iterate array for all element .

either both each and foreach Return the current key and value pair from an array


$array = array(" i ","love","php");
$next = each($array);
print_r($next);//return first key value from array 

you cant use each like foreach

$array = array(" i ","love","php");
 each($array as $key=>$value){
print_r($value);
}

because its not made for iterate the whole array next by next until loop disrupted

foreach loop 


$array = array(" i ","love","php");
 foreach($array as $key=>$value){
print_r($value);
}

its almost same like while loop , only foreach have key value return at every iteration

(PHP 4, PHP 5, PHP 7, PHP 8)

The foreach construct provides an easy way to iterate over arrays. foreach works only on arrays and objects, and will issue an error when you try to use it on a variable with a different data type or an uninitialized variable. There are two syntaxes:

foreach (iterable_expression as $value)
    statement
foreach (iterable_expression as $key => $value)
    statement

The first form traverses the iterable given by iterable_expression. On each iteration, the value of the current element is assigned to $value.

The second form will additionally assign the current element's key to the $key variable on each iteration.

Note that foreach does not modify the internal array pointer, which is used by functions such as current() and key().

It is possible to customize object iteration.

In order to be able to directly modify array elements within the loop precede $value with &. In that case the value will be assigned by reference.

<?php
$arr 
= array(1234);
foreach (
$arr as &$value) {
    
$value $value 2;
}
// $arr is now array(2, 4, 6, 8)
unset($value); // break the reference with the last element
?>

Warning

Reference of a $value and the last array element remain even after the foreach loop. It is recommended to destroy it by unset(). Otherwise you will experience the following behavior:

<?php
$arr 
= array(1234);
foreach (
$arr as &$value) {
    
$value $value 2;
}
// $arr is now array(2, 4, 6, 8)

// without an unset($value), $value is still a reference to the last item: $arr[3]

foreach ($arr as $key => $value) {
    
// $arr[3] will be updated with each value from $arr...
    
echo "{$key} => {$value} ";
    
print_r($arr);
}
// ...until ultimately the second-to-last value is copied onto the last value

// output:
// 0 => 2 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 2 )
// 1 => 4 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 )
// 2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )
// 3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )

?>

It is possible to iterate a constant array's value by reference:

<?php
foreach (array(1234) as &$value) {
    
$value $value 2;
}
?>

Note:

foreach does not support the ability to suppress error messages using @.

Some more examples to demonstrate usage:

<?php
/* foreach example 1: value only */$a = array(12317);

foreach (

$a as $v) {
    echo 
"Current value of \$a: $v.\n";
}
/* foreach example 2: value (with its manual access notation printed for illustration) */$a = array(12317);$i 0/* for illustrative purposes only */foreach ($a as $v) {
    echo 
"\$a[$i] => $v.\n";
    
$i++;
}
/* foreach example 3: key and value */$a = array(
    
"one" => 1,
    
"two" => 2,
    
"three" => 3,
    
"seventeen" => 17
);

foreach (

$a as $k => $v) {
    echo 
"\$a[$k] => $v.\n";
}
/* foreach example 4: multi-dimensional arrays */
$a = array();
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";

foreach (

$a as $v1) {
    foreach (
$v1 as $v2) {
        echo 
"$v2\n";
    }
}
/* foreach example 5: dynamic arrays */foreach (array(12345) as $v) {
    echo 
"$v\n";
}
?>

Unpacking nested arrays with list()

(PHP 5 >= 5.5.0, PHP 7, PHP 8)

It is possible to iterate over an array of arrays and unpack the nested array into loop variables by providing a list() as the value.

For example:

<?php
$array 
= [
    [
12],
    [
34],
];

foreach (

$array as list($a$b)) {
    
// $a contains the first element of the nested array,
    // and $b contains the second element.
    
echo "A: $a; B: $b\n";
}
?>

The above example will output:

You can provide fewer elements in the list() than there are in the nested array, in which case the leftover array values will be ignored:

<?php
$array 
= [
    [
12],
    [
34],
];

foreach (

$array as list($a)) {
    
// Note that there is no $b here.
    
echo "$a\n";
}
?>

The above example will output:

A notice will be generated if there aren't enough array elements to fill the list():

<?php
$array 
= [
    [
12],
    [
34],
];

foreach (

$array as list($a$b$c)) {
    echo 
"A: $a; B: $b; C: $c\n";
}
?>

The above example will output:

Notice: Undefined offset: 2 in example.php on line 7
A: 1; B: 2; C: 

Notice: Undefined offset: 2 in example.php on line 7
A: 3; B: 4; C: 

Sanusi Hassan

18 days ago

destructure array elements

you can unpac nested array elements using the following

<?php
$array
= [
    [
1, 2],
    [
3, 4],
];

foreach (

$array as $v) {
    [
$a, $b] = $v;
    echo
"A: $a; B: $b\n";
}
?>

Okafor Chiagozie

15 days ago

An easier way to unpack nested array elements

$array = [
    [1, 2],
    [3, 4],
];

foreach ($array as [$a, $b]) {
    echo "A: $a; B: $b\n";
}

jon at pearkins dot com

6 days ago

For an array, foreach presents the elements of the array in the order that they were added to the array. For example, if you need to have the elements presented in ascending order by key, use the ksort function to rearrange the elements of the array in key sequence.

This behavior is a result of the way that PHP arrays are stored. foreach merely presents the elements of an array in the order that they are stored within the array.