如何递归搜索和替换未知深度多维 PHP 数组中的值?

use*_*182 2 php recursion json pass-by-reference multidimensional-array

我正在使用 JSON 字符串。我将其转换为关联数组以查找特定值并在找到某个键​​时更改这些值(['content'])。数组的深度总是未知的,并且总是变化的。

这是我写的函数。它接受一个数组作为参数并通过引用传递它,以便修改变量本身而不是它的一个副本,该副本在本地范围内适用于该函数。

$json_array = json_decode($json_string, true);

function replace_data(&$json_array, $data='REPLACE TEST')
{
   foreach($json_array as $key => $value) {
       if ($key == 'content' && !is_array($value)) {
           $json_array[$key] = $data;

       } else {
           if (is_array($value)) {
               replace_data($value, $data);
           }
       }
   }

}


replace_data($json_array, "test test test");
var_dump($json_array);
Run Code Online (Sandbox Code Playgroud)

我期望发生的是每次在任何深度找到键 ['content'] 时,它都会替换为 $data 参数中指定的值。

但是,当我var_dump($json_array)这些值不变。

我错过了什么?

Tim*_*rib 5

array_walk_recursive

function replace_data($json_array, $data = 'REPLACE TEST') {
    array_walk_recursive($json_array, function (&$value, $key) use ($data) {
        if (!is_array($value) && $key === 'content') {
            // $value passed by reference
            $value = $data;
        }
    });
    return $json_array;
}
Run Code Online (Sandbox Code Playgroud)

并且没有参考:

function replace_data($json_array, $data = 'REPLACE TEST') {
    foreach ($json_array as $key => $value) {
        if (is_array($value)) {
            $json_array[$key] = replace_data($value, $data);
        } elseif ($key === 'content') {
            $json_array[$key] = $data;
        }
    }
    return $json_array;
}
Run Code Online (Sandbox Code Playgroud)