|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2005-01-05 13:51 UTC] sveta at microbecal dot com
Description:
------------
When I call
array_walk_recursive($array, array('Class', 'static_method1'), 'xxx');
and after it
array_walk_recursive($array, array('Class', 'static_method2'), 'xxx');
static_method2 was not called, but called static_method1
Is it right behavior?
Reproduce code:
---------------
class Test {
public static function rtrim(&$value, $key, $charlist = null) {
if (is_string($value)) {
if (null !== $charlist) {
$value = rtrim($value, $charlist);
} else {
$value = rtrim($value);
}
}
}
public static function add_suffix(&$value, $key, $suffix) {
$value = $value . $suffix;
}
}
$array = array('a' => array('b', 'c'),
'b' => array('d', 'e'),
);
array_walk_recursive($array, array('Test', 'add_suffix'), 'xxx');
var_dump($array);
array_walk_recursive($array, array('Test', 'rtrim'), 'xxx');
var_dump($array);
Expected result:
----------------
array(2) {
["a"]=>
array(2) {
[0]=>
string(4) "bxxx"
[1]=>
string(4) "cxxx"
}
["b"]=>
array(2) {
[0]=>
string(4) "dxxx"
[1]=>
string(4) "exxx"
}
}
array(2) {
["a"]=>
array(2) {
[0]=>
string(7) "b"
[1]=>
string(7) "c"
}
["b"]=>
array(2) {
[0]=>
string(7) "d"
[1]=>
string(7) "e"
}
}
Actual result:
--------------
array(2) {
["a"]=>
array(2) {
[0]=>
string(4) "bxxx"
[1]=>
string(4) "cxxx"
}
["b"]=>
array(2) {
[0]=>
string(4) "dxxx"
[1]=>
string(4) "exxx"
}
}
array(2) {
["a"]=>
array(2) {
[0]=>
string(7) "bxxxxxx"
[1]=>
string(7) "cxxxxxx"
}
["b"]=>
array(2) {
[0]=>
string(7) "dxxxxxx"
[1]=>
string(7) "exxxxxx"
}
}
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Fri Dec 05 23:00:01 2025 UTC |
How to speak in English: "doshlo"? I've just loaded correct array.c file from PHP 5_0_3 branch, looked into it and a bit changed array.c from my PHP 5_1 branch Now it works fine. Thank You! (diff :) --- array.c.back 2004-11-02 01:29:00.000000000 +0300 +++ array.c 2005-01-05 23:39:52.000000000 +0300 @@ -1157,6 +1157,8 @@ argc = ZEND_NUM_ARGS(); old_walk_func_name = BG(array_walk_func_name); + BG(array_walk_fci_cache) = empty_fcall_info_cache; + if (argc < 2 || argc > 3 || zend_get_parameters_ex(argc, &array, &BG(array_walk_func_name), &userdata) == FAILURE) { BG(array_walk_func_name) = old_walk_func_name; )