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

 ID:                 64005
 Updated by:         google...@php.net
 Reported by:        youri dot essa at gmail dot com
 Summary:            array_merge memorry issues.
-Status:             Open
+Status:             Not a bug
 Type:               Bug
 Package:            Arrays related
 Operating System:   Linux
 PHP Version:        5.4.10
 Block user comment: N
 Private report:     N

 New Comment:

This is not a bug, but a simple mistake of using references in foreach. Pelase 
see http://php.net/references and http://php.net/foreach for more details. 
Particularly the red warning box at the bottom of the page at php.net/foreach 
where it states "Reference of a $value and the last array element remain even 
after the foreach loop. It is recommended to destroy it by unset()."


Previous Comments:
------------------------------------------------------------------------
[2013-01-16 10:10:56] youri dot essa at gmail dot com

Description:
------------
---
>From manual page: 
>http://www.php.net/function.array-merge#refsect1-function.array-
merge-description
---


Test script:
---------------
foreach($cols as $key => &$value) {
        if(array_key_exists($key, $fields)) {
                $value = array_merge($fields[$key], $value);
        }
}
                        
foreach($fields as $key => $value) {
        if(!array_key_exists($key, $cols)) {
                $cols[$key] = $value;
        }
}

Expected result:
----------------
Expected result is that col becomes is an array with all the values that where 
already defined added with the values from fields.

Actual result:
--------------
The sub-array in cols wich was merged with the same sub-array in fields becomes 
overwritten everytime the next foreach statement accesses the value $value, 
witch 
result. the fix for this is to have a diffrent name for the array merging, this 
leads me to belive that array_merge keeps re-evaluating the values.


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



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

Reply via email to