|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2015-04-07 16:57 UTC] nikic@php.net
-Status: Open
+Status: Closed
-Assigned To:
+Assigned To: nikic
[2015-04-07 16:57 UTC] nikic@php.net
|
|||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Thu Dec 18 19:00:01 2025 UTC |
Description: ------------ When looping by foreach on 2D array instead of it's array keys inner arrays' internal pointer is reset. Test script: --------------- <?php $outer = array( 'A' => array(0 => '1st', 1 => '2nd', 3 => '3rd'), 'B' => array( 1 => '2nd', 2 => 'still 2nd', 4 => '3rd', 5 => 'still 3rd'), ); $syncMarks = array(1, 3); do { $next = FALSE; $current = array(); $syncMark = current($syncMarks); //foreach (array_keys($outer) as $key) { foreach ($outer as $key => $inner) { $offset = key($outer[$key]); if (isset($offset)) { $next = TRUE; if ($syncMark === FALSE || $offset < $syncMark) { $current[$key] = current($outer[$key]); next($outer[$key]); } } } var_dump($current); } while (empty($current) && next($syncMarks) || $next); Expected result: ---------------- array(1) { ["A"]=> string(3) "1st" } array(0) { } array(2) { ["A"]=> string(3) "2nd" ["B"]=> string(3) "2nd" } array(1) { ["B"]=> string(9) "still 2nd" } array(0) { } array(2) { ["A"]=> string(3) "3rd" ["B"]=> string(3) "3rd" } array(1) { ["B"]=> string(9) "still 3rd" } array(0) { } Actual result: -------------- array(1) { ["A"]=> string(3) "1st" } array(0) { } array(2) { ["A"]=> string(3) "2nd" ["B"]=> string(3) "2nd" } array(1) { ["B"]=> string(9) "still 2nd" } array(0) { } array(2) { ["A"]=> string(3) "3rd" ["B"]=> string(3) "3rd" } array(2) { ["A"]=> string(3) "1st" // <-- This is unwanted result ["B"]=> string(9) "still 3rd" ...