Недопустимое смещение строки в функции в PHP

0

У меня есть эта функция 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

3 ответа

1
Лучший ответ

Я думаю, ваша функция имеет слишком много циклов. Попробуй это:

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;
            }
        }
    }
  • 0
    Хороший улов @Nan! Благодарю.
1

Подумайте еще раз, как и где вы итерации.

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) {

}
  • 0
    Получил: Illegal string offset 'value'
  • 0
    @ Renée Это точно такая же ошибка, как и для id которая предполагает, что у вас есть другая, если ее нужно переписать таким же образом ( $number=='value' && $row == .. )
Показать ещё 1 комментарий
0

Прежде всего, напечатайте массив после json_decode, используя функцию print_r. Вы получите ответ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню