|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2010-06-03 12:28 UTC] daniel dot menard at ehesp dot fr
Description:
------------
I have an array and a variable which is a reference on some element in this array:
$arr=array('a'); $ref = &$arr[0]
If I apply array_filter() with a callback like trim() or count() on the array, the reference is broken and $ref is no longer a reference (If I apply array_filter() without a callback, the reference is not altered and the result is correct).
I think that this is a regression introduced in php 5.2.11: with the test script below, 5.2.10 give the good result, 5.2.11 do not.
I also tested with the latest version (5.3.2): same result, reference is broken.
PS: I tested on windows XP with packages php-5.x.y-Win32-VC6-x86.zip provided on this page: http://windows.php.net/downloads/releases/archives/
Test script:
---------------
// Init
$arr = array('some value');
$ref = & $arr[0];
// Change $arr
$arr[0] = 'ONE';
echo 'step 1. $ref is ', ($ref !== 'ONE') ? 'BROKEN' : 'OK', "\n";
// Apply array_filter (without callback) and change $arr
array_filter($arr);
$arr[0] = 'TWO';
echo 'step 2. $ref is ', ($ref !== 'TWO') ? 'BROKEN' : 'OK', "\n";
// Apply array_filter (with a callback) then change $arr
array_filter($arr,'trim');
$arr[0] = 'THREE';
echo 'step 3. $ref is ', ($ref !== 'THREE') ? 'BROKEN' : 'OK', "\n";
Expected result:
----------------
step 1. $ref is OK
step 2. $ref is OK
step 3. $ref is OK
Actual result:
--------------
step 1. $ref is OK
step 2. $ref is OK
step 3. $ref is BROKEN
Patchesbug_51986_5_3 (last revision 2010-09-29 21:12 UTC by cataphract@php.net)Pull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Oct 26 17:00:01 2025 UTC |
Use a reference in your callback function: function my_trim(& $a) { return trim($a); }