php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #75717 RecursiveArrayIterator does not traverse arrays by reference
Submitted: 2017-12-21 16:17 UTC Modified: 2017-12-21 16:30 UTC
From: greg at girty dot net Assigned:
Status: Closed Package: SPL related
PHP Version: 7.1.12 OS: OSX, Debian Linux
Private report: No CVE-ID: None
View Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
If you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: greg at girty dot net
New email:
PHP Version: OS:

 

 [2017-12-21 16:17 UTC] greg at girty dot net
Description:
------------
The expected behaviour of RecursiveArrayIterator is that only leaf nodes will be iterated, but if an array is contained by reference, it is not traversed, instead it is returned by next().

Explicit use of RecursiveIteratorIterator::LEAVES_ONLY has no affect.

HHVM gives the expected result, see https://3v4l.org/up3me 


Test script:
---------------
function flatten(array $nestedArraysAndStrings){
    $flat=[];
    $iter = new RecursiveIteratorIterator(
        new RecursiveArrayIterator($nestedArraysAndStrings));
    foreach($iter as $leaf){ $flat[] = $leaf; }
    return join(NULL, $flat);
}

$noRefs = [[[['some']]],[' nested ']," items \n"];

$withRefs = []+$noRefs;
$wat = $noRefs[0];
$withRefs[0] = &$wat;

echo flatten($noRefs);
echo flatten($withRefs);

Expected result:
----------------
some nested  items 
some nested  items 

Actual result:
--------------
some nested  items 
Notice: Array to string conversion ... on line 8
Array nested  items 

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2017-12-21 16:22 UTC] peehaa@php.net
Isn't this a dupe of https://bugs.php.net/bug.php?id=75716 ?
 [2017-12-21 16:30 UTC] peehaa@php.net
-Status: Open +Status: Feedback
 [2017-12-21 17:33 UTC] greg at girty dot net
I created https://bugs.php.net/bug.php?id=75716 with errors, and closed it when I realized the mistake. (My first bug submission, forgive me I didn't know how to correct 75716, revoke it, or mark it as erroneous.)

This is the correct version.
 [2017-12-22 17:02 UTC] nikic@php.net
Automatic comment on behalf of nikita.ppv@gmail.com
Revision: http://git.php.net/?p=php-src.git;a=commit;h=ccb113c3e5964ef2d2e5b4ae3e67d61702db9bfc
Log: Fixed bug #75717
 [2017-12-22 17:02 UTC] nikic@php.net
-Status: Feedback +Status: Closed
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Mon Oct 14 11:01:27 2024 UTC