【发布时间】:2014-04-21 06:37:48
【问题描述】:
我需要一个函数,它可以递归地解析一个多维数组以获取某个字符串值的(部分),如果找到,则返回包含该字符串的整个值。
我想出了以下解决方案:
function & ransackArray(array & $haystack, $needle) {
foreach($haystack as &$element) {
if(is_array($element)){
if($v=ransackArray($element, $needle))
return $v;
} else {
if(strstr($element, $needle))
return $element;
}
}
return false;
}
这很好用。例如,提供:
$data=array(
'key' => 'something',
'children' => array(
'someValue' => 'myTest',
'someMore' => 'yes'
)
);
并运行:
$r=ransackArray($data, 'myTes');
这将导致$r 包含“myTest”。
问题是现在我找到了这个值,我想在$data 中更改它,马上写:
$r='new value';
这应该会有效地导致数据看起来像这样:
$data=array(
'key' => 'something',
'children' => array(
'someValue' => 'new value',
'someMore' => 'yes'
)
);
但是,这似乎不起作用。也许我误解了一些关于参考的东西。在任何情况下,我需要它来工作的原因是为什么我将$haystack 作为参考传递,并将函数的结果作为一个返回。
这可以吗?如果是,如何?如果没有 - 为什么不呢?
【问题讨论】:
标签: php arrays search multidimensional-array pass-by-reference