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');

将变量传递给函数时,不需要使用
&
——只需将
&
放在函数签名中的参数前面——但在像您这样的情况下,从函数获取返回值时,函数调用和函数签名中都需要有
&
。有关更多信息,请参阅