Я работаю с строкой JSON. Я конвертирую его в ассоциативный массив, чтобы найти определенные значения и изменить эти значения, когда найден определенный ключ (['content']). Глубина массива всегда неизвестна и всегда будет меняться.Как я могу рекурсивно искать и заменять значения внутри многомерного массива PHP с неизвестной глубиной?
Вот эта функция, которую я написал. Он принимает массив как аргумент и передает его по ссылке, чтобы сама переменная была изменена, а не копия локально этой функции.
$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);
Что я ожидал, так это каждый раз, когда клавиша [ «содержание»] встречается в независимо от того, какой глубины, он заменяет с этим значением, указанным в аргументе $ данных.
Но, когда я var_dump($json_array)
Эти значения не изменяются.
Что мне не хватает?
нуждается больше ссылок. –
Не уверен, что вы имеете в виду. На странице руководства PHP указано, что «достаточно только определений функций, чтобы правильно передать аргумент по ссылке». Где я могу добавить дополнительные ссылки? http://php.net/manual/en/language.references.pass.php – user658182
Ссылки обычно усложняют код и лучше их избегают. – Timurib