Не могу изменить значение в массиве php

0
{
    "available":18,
    "bind":0,
    "info":"",
    "hours_definitions":[
        {
            "value":"21:40"
        },
        {
            "value":"22:50"
        }
    ],
    "hours":{
        "21:40":{
            "available":1,
            "bind":0,
            "info":"",
            "notes":"",
            "price":3000,
            "promo":0,
            "status":"available"
        },
        "22:50":{
            "available":1,
            "bind":0,
            "info":"",
            "notes":"",
            "price":3000,
            "promo":0,
            "status":"available"
        }
    },
    "notes":"",
    "price":2000,
    "promo":0,
    "status":"available"
}

У меня есть массив JSON ($ dataar), где мне нужно изменить "доступно" на 0, где "hours" array 21:40.

Я пытаюсь использовать foreach:

$dataar1 = json_decode($dataar, true);
$dataar2 = $dataar1['hours'];
$hour = "21:40";
foreach ($dataar2 as $key => $entry) {
     if ($key == $hour) {
        $dataar2[$key]['available'] = 0;
    }
}

И я получаю $dataar2[$key]['available'] = 0, но когда я пытаюсь json_encode, я снова вижу: 1.

Как я могу это исправить?

  • 0
    Добавьте код, который вы используете для кодирования, обратно в JSON - я думаю, что вы, возможно, не кодируете правильную переменную.
Теги:
arrays
foreach

2 ответа

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

Вы не изменяете фактическую переменную per-say, вы просто назначаете ее новой переменной и изменяете ее. Это будет работать:

$dataar1 = json_decode($dataar, true);

foreach($dataar1['hours'] as $key => &$val) {
    if($key == '21:40') {
        $val['available'] = 0;
    }
}

В приведенном выше примере используется PHP passing by-reference для изменения исходного массива.

Example

  • 0
    Спасибо! Работал)
1

Вы только меняете $ dataar2, который является новой переменной и не имеет отношения к оригиналу. Попробуйте это вместо этого:

$dataar1 = json_decode($dataar, true);
$hour = "21:40";
foreach ($dataar1['hours'] as $key => $entry) {
     if ($key == $hour) {
        $dataar1['hours'][$key]['available'] = 0;
    }
}
$dataar = json_encode($dataar1);

Ещё вопросы

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