Php 修改函数返回的数组子值
我需要一个函数,该函数递归解析多维数组中某个字符串值的(部分),如果找到,则返回该字符串包含的整个值 我提出了以下解决方案:Php 修改函数返回的数组子值,php,arrays,search,multidimensional-array,pass-by-reference,Php,Arrays,Search,Multidimensional Array,Pass By Reference,我需要一个函数,该函数递归解析多维数组中某个字符串值的(部分),如果找到,则返回该字符串包含的整个值 我提出了以下解决方案: function & ransackArray(array & $haystack, $needle) { foreach($haystack as &$element) { if(is_array($element)){ if($v=ransackArray($element, $needle))
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
作为引用传递,并将函数的结果作为引用返回
这能做到吗?如果是,如何进行?如果没有,为什么不呢?您丢失了两个安培数…这行上有一个:
if($v=self::ransackArray($element,$needle))
应该是:
if($v=&self::ransackArray($element,$needle))
这一行有一个:
$r=ransackArray($data,'myTes')代码>
应该是:
$r=&ransackArray($data,'myTes')代码>
(注意:看起来您的ransackArray
函数实际上是类中的一个方法,因此如果您从类中调用该方法,那么它将是$r=&$this->ransackArray($data,'myTes');
)
将变量传递给函数时,不需要使用&
——只需将&
放在函数签名中的参数前面——但在像您这样的情况下,从函数获取返回值时,函数调用和函数签名中都需要有&
。有关更多信息,请参阅