PHP VERSION: 8.2.18

foreach_and_current.php

<?php
// foreach behavior

echo "BEFORE assignment\n";
echo 
"-----------------\n";

// array pointer gets set to 2nd element
$a = [123];
foreach (
$a as $v) {
    
printf("%2d - %2d\n"$vcurrent($a));
}

echo 
PHP_EOL;
echo 
"AFTER assignment\n";
echo 
"----------------\n";

$a = [123];
// array pointer gets set to 1st element
$b $a;
foreach (
$a as $v) {
    
printf("%2d - %2d\n"$vcurrent($a));
}

/*
 * X-Powered-By: PHP/5.5.30
Content-type: text/html

BEFORE assignment
-----------------
 1 -  2
 2 -  2
 3 -  2

AFTER assignment
----------------
 1 -  1
 2 -  1
 3 -  1

PHP 7.0
* BEFORE assignment
-----------------
 1 -  1
 2 -  1
 3 -  1

AFTER assignment
----------------
 1 -  1
 2 -  1
 3 -  1
*/

Output


BEFORE assignment
-----------------
 1 -  1
 2 -  1
 3 -  1

AFTER assignment
----------------
 1 -  1
 2 -  1
 3 -  1
SOURCE CODE