ID:               42850
 Updated by:       [EMAIL PROTECTED]
 Reported By:      ltaupiac at lfdj dot com
-Status:           Open
+Status:           Closed
 Bug Type:         Arrays related
 Operating System: windows/solaris
 PHP Version:      5.3.0-dev
 New Comment:

This bug has been fixed in CVS.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.




Previous Comments:
------------------------------------------------------------------------

[2007-11-26 08:00:18] ltaupiac at lfdj dot com

I have tested on window with apache 2.2.6 the snap.zip you given.

The bug is still there.
A & for reference is still leaved after call array_walk_recursive on
val2 and original array can't be duplicate anymore after.

Reproduce code:
--------------
echo PHP_VERSION;
$data = array ('key1' => 'val1', array('key2' => 'val2'));
echo '<pre>';
function foo2($item, $key) {}; // dumb callback function
var_dump($data);
array_walk_recursive($data, 'foo2');
$data2 = $data;      // Duplicate array
$data2[0] = 'altered'; // Alter copy
var_dump($data);
var_dump($data2);

Expected result:
----------------
5.3.0-dev

array(2) {
  ["key1"]=>
  string(4) "val1"
  [0]=>
  array(1) {
    ["key2"]=>
    string(4) "val2"
  }
}
array(2) {
  ["key1"]=>
  string(4) "val1"
  [0]=>
  string(7) "val2"
}
array(2) {
  ["key1"]=>
  string(4) "val1"
  [0]=>
  string(7) "altered"
}

Actual result:
--------------
5.3.0-dev

array(2) {
  ["key1"]=>
  string(4) "val1"
  [0]=>
  array(1) {
    ["key2"]=>
    string(4) "val2"
  }
}
array(2) {
  ["key1"]=>
  string(4) "val1"
  [0]=>
  &string(7) "altered"
}
array(2) {
  ["key1"]=>
  string(4) "val1"
  [0]=>
  &string(7) "altered"
}

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

[2007-11-25 17:35:35] [EMAIL PROTECTED]

Please try using this CVS snapshot:

  http://snaps.php.net/php5.3-latest.tar.gz
 
For Windows (zip):
 
  http://snaps.php.net/win32/php5.3-win32-latest.zip

For Windows (installer):

  http://snaps.php.net/win32/php5.3-win32-installer-latest.msi



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

[2007-10-04 08:10:34] ltaupiac at lfdj dot com

Description:
------------
I have to reopen this bug http://bugs.php.net/bug.php?id=42655 because
it was incorrectly closed and tony2001 doesn't seem to receive email.

Here Copy/paste email i send him.

This is not the same bug.

In #34982, an array is modified outside the function func() that call
array_walk_recursive. This bug doesn't exist anymore in 5.2.4

The bug i report is when calling array_walk_recursive on an array
(callback function doesn't even have reference & for array input and
does nothing).
Original array shouldn't be modified, but if you var_dump it, you can
see reference on subarray

[0]=> &array(1)

instead of

[0]=>  array(1)

The array shouldn't have been modified but array_walk_recursive leaves
references.
This can cause trouble, eg you cant duplicate the original array
anymore. Look at following example

$data = array ('key1' => 'val1', array('key2' => 'val2'));

function foo($item, $key) {}; // dumb callback function
var_dump($data);
array_walk_recursive($data, 'foo');
$data2 = $data;      // Duplicate array
$data2[0] = 'altered'; // Alter copy
var_dump($data);
var_dump($data2);

array(2) {
  ["key1"]=> string(4) "val1"
  [0]=> &string(5) "bingo"
}
array(2) {
  ["key1"]=> string(4) "val1"
  [0]=> &string(5) "bingo"
}

both $data and $data2 are altered;


Reproduce code:
---------------
$data = array ('key1' => 'val1', array('key2' => 'val2'));

function dumb($i, $k){}

var_dump($data);
array_walk_recursive($data,'foo');

// Double check the [0]=>&array(1) in actual  result
var_dump($data);

Expected result:
----------------
Expected result:
----------------
array(2) {
  ["key1"]=> string(4) "val1"
  [0]=> array(1) {
    ["key2"]=> string(4) "val2"
  }
}
array(2) {
  ["key1"]=> string(4) "val1"
  [0]=> array(1) {
    ["key2"]=> string(4) "val2"
  }
}

Actual result:
--------------
Actual result:
--------------
array(2) {
  ["key1"]=> string(4) "val1"
  [0]=> array(1) {
    ["key2"]=> string(4) "val2"
  }
}
array(2) {
  ["key1"]=> string(4) "val1"
  [0]=> &array(1) {
    ["key2"]=> string(4) "val2"
  }
}


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


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

Reply via email to