У меня есть эта функция PHP:
function editDatas($datas, $got, $to_find, $to_replace) {
foreach($datas['datas'] as $key => $rows) {
foreach($rows as $number => $row) {
if($row['id'] == $got) {
$datas['datas'][$key][$number][$to_find] = $to_replace;
return $datas;
}
}
}
}
И этот призыв:
$datas = json_decode(file_get_contents('datas.json'), true);
$datas = editDatas($datas, 'hotel_name', "value", 'My new hotel name');
Мой json на самом деле так:
{
"datas": [
{
"category": "General",
"id": "hotel_name",
"type": "input",
"maxlength": "15",
"size": "10",
"label": "Hotel name",
"help": "Hotel name",
"value": "Rubi hotel"
},
...
Я пытаюсь заменить какую-то ценность в моем json.
Проблема, с которой я столкнулся, - это ошибка:
Illegal string offset 'id' in line 33
Что в моей функции следующее:
if($row['id'] == $got) {
Я не понимаю, почему, поскольку id
знает.
Не могли бы вы помочь мне решить мою проблему.
Благодарю.
Я думаю, ваша функция имеет слишком много циклов. Попробуй это:
function editDatas($datas, $got, $to_find, $to_replace) {
foreach($datas['datas'] as $key => $row) {
if($row['id'] == $got) {
$datas['datas'][$key][$to_find] = $to_replace;
return $datas;
}
}
}
Подумайте еще раз, как и где вы итерации.
foreach($datas['datas'] as $key => $rows) {
// $key is 0, 1, ... and $rows is the object
foreach($rows as $number => $row) {
// $number is category, id, type ... and
// $row is General, hotel_name, ...
Зная это, вы можете переписать
if ($number == 'id' && $row == $got) {
}
Illegal string offset 'value'
id
которая предполагает, что у вас есть другая, если ее нужно переписать таким же образом ( $number=='value' && $row == ..
)
Прежде всего, напечатайте массив после json_decode, используя функцию print_r. Вы получите ответ.