PHP数组\u walk\u递归:两种方法,不同的结果
给定以下设置:PHP数组\u walk\u递归:两种方法,不同的结果,php,arrays,recursion,global,Php,Arrays,Recursion,Global,给定以下设置: $storer = array(); $arr = array(1, 2, 3); 我很好奇为什么这不写入$storer array_walk_recursive($arr, function($val, $key) { global $storer; $storer[] = 'foo'; }); print_r($storer); //no change - empty …但这确实: array_walk_recursive($arr, fu
$storer = array();
$arr = array(1, 2, 3);
我很好奇为什么这不写入$storer
array_walk_recursive($arr, function($val, $key) {
global $storer;
$storer[] = 'foo';
});
print_r($storer); //no change - empty
…但这确实:
array_walk_recursive($arr, function($val, $key) use (&$storer) {
$storer[] = 'foo';
});
print_r($storer); //three items, all 'foo'
谁能启发我?在用户功能中,我希望
global
能够提供读/写访问。在尝试使用键获得一个扁平阵列后,这可以:
$result = array();
array_walk_recursive($inputarray,function($v, $k) use (&$result){ $result[$k] = $v; });
$inputarray = $result;
我希望有人能找到这一点,它会有所帮助。我尝试了第一种方法,它看起来像预期的那样工作,它会打印3个foo。这两个函数都会写入
foo
三次,您是在本地开发的吗?如果是这样,请尝试重新启动Apache。如果是在外部,请再次尝试上载文件,这可能是暂时的失败。是语句“$storer=array();”吗真正在全局范围内,即不在函数内。尝试打印(数组密钥存在('storer',$GLOBALS))-这应该返回true。如果不尝试print_r(debug_backtrace(debug_backtrace_IGNORE_ARGS))-这将为您提供调用堆栈,您可以从中确定范围。啊哈,我想我可能已经从注释中推断出发生了什么<代码>$storer不是真正的全局性;它在外部范围内。所有这些都在一个类方法中。。。