Edit report at https://bugs.php.net/bug.php?id=55723&edit=1

 ID:                 55723
 User updated by:    exsystemchina at gmail dot com
 Reported by:        exsystemchina at gmail dot com
 Summary:            Array of references return copies of elements
                     instead of references
 Status:             Bogus
 Type:               Bug
 Package:            Arrays related
 Operating System:   Windows XP Pro SP 3
 PHP Version:        5.3.8
 Block user comment: N
 Private report:     N

 New Comment:

<?php
        $ArrayMeta = array('a'=>1, 'b'=>array ('bb' => 2));
        var_dump($ArrayMeta);
        $mPendingStack = array (&$ArrayMeta); 

        $mCurrArray = null; //Reference to current array.
        while (count($mPendingStack) != 0) {
                $mCurrArray = &$mPendingStack[count($mPendingStack)-1];
                unset($mPendingStack[count($mPendingStack)-1]);
                foreach ($mCurrArray as &$mValue) {
                        if (is_array($mValue)) {
                                $mPendingStack[count($mPendingStack)] = 
$mValue; //If I removed & before $mValue...
                        }
                        else {
                                $mValue = null;
                        }
                }
        }
        
        var_dump($ArrayMeta);

And still, PHP Manual shows me that the & symbol in foreach clause will produce 
reference. But this is also problemetic in this script. Only $ArrayMeta['a'] 
turned to 
null.


Previous Comments:
------------------------------------------------------------------------
[2011-09-19 09:41:17] exsystemchina at gmail dot com

Wired, still problemetic.
Compare with those two scripts:
<?php
        $ArrayMeta = array('a'=>1, 'b'=>array ('bb' => 2));
        $mPendingStack = array (&$ArrayMeta); 

        $mCurrArray = null; //Reference to current array.
        while (count($mPendingStack) != 0) {
                $mCurrArray = &$mPendingStack[count($mPendingStack)-1]; 
                unset($mPendingStack[count($mPendingStack)-1]);
                reset($mCurrArray);
                for ($i = 0; $i < count($mCurrArray); ++$i) {
                        if (is_array($mCurrArray[key($mCurrArray)])) {
                                $mPendingStack[count($mPendingStack)] = 
&$mCurrArray[key($mCurrArray)];
                        }
                        else {
                                $mCurrArray[key($mCurrArray)] = null;
                        }
                        next($mCurrArray);
                }
        }
        
        var_dump($ArrayMeta);
?>
and
<?php


        $ArrayMeta = array('a'=>1, 'b'=>array ('bb' => 2));
        $mPendingStack = array (&$ArrayMeta); 

        $mCurrArray = null; //Reference to current array.
        while (count($mPendingStack) != 0) {
                $mCurrArray = &$mPendingStack[count($mPendingStack)-1]; 
                unset($mPendingStack[count($mPendingStack)-1]);
                foreach ($mCurrArray as &$mValue) {
                        if (is_array($mValue)) {
                                $mPendingStack[count($mPendingStack)] = 
&$mValue;
                        }
                        else {
                                $mValue = null;
                        }
                }
        }

        var_dump($ArrayMeta);
?>
Array elements of references can be found via both two ouputs, though those 
outputs were different. But the expected result should contains no reference, 
since I var_dump-
ed $ArrayMeta, which should be no reference inside it.

I think it is little bit buggy.

Those are tested under PHP 5.3.8 and PHP 5.3.5.

------------------------------------------------------------------------
[2011-09-19 07:09:19] exsystemchina at gmail dot com

OK. it's wired though.

------------------------------------------------------------------------
[2011-09-19 04:58:31] larue...@php.net

see blow:
<?php
$Item = array ('foo' => 'bar');
$Array = array (&$Item);
$rItem = & $Array[0]; 
$rItem['foo'] = 'foobar';
echo $Item['foo'];

------------------------------------------------------------------------
[2011-09-19 02:50:37] exsystemchina at gmail dot com

[Sorry, Grammar Error.]When trying to get [an] element of reference inside an 
array, php always returns a 
copy of that variable being referred. See the comment of Test Script.

------------------------------------------------------------------------
[2011-09-19 02:46:35] exsystemchina at gmail dot com

Description:
------------
When trying to get a element of reference inside an array, php always returns a 
copy of that variable being referred. See the comment of Test Script.

Test script:
---------------
<?php
$Item = array ('foo' => 'bar');
$Array = array (&$Item);
$rItem = $Array[0]; //$rItem is expected to be a reference, but it doesn't.
$rItem['foo'] = 'foobar';
echo $Item['foo'];

Expected result:
----------------
foobar

Actual result:
--------------
bar


------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=55723&edit=1

Reply via email to