Некорректно удаляет элемент массива

165
04 мая 2018, 11:24

Помогите пожалуйста, проблема заключается в следующем. Получаю из БД json строку содержащую id пользователей, преобразую ее в в массив с помощью json_decode(), удаляю нужный id'шник и преобразую массив обратно в json строку и при попытке обратиться к этой строке( получаю следующую ошибку 'Fatal error: Uncaught Error: Cannot use object of type stdClass as array'), но если удаляю последний элемент массива, то все в порядке. В чем может быть дело?

 public static function DeleteEventByUser($user_id, $news_id)
{
    $user_id = intval($user_id);
    $news_id = intval($news_id);
    $link = db::getConnection();
    $result = $link->prepare("SELECT `events` FROM `user` WHERE `id` = :user_id");
    $result->execute(array('user_id' => $user_id));
    $string = $result->fetch();
    $record = $string['events'];
    $massive = json_decode($record);
    if (is_array($massive) and !empty($massive)) {
        foreach ($massive as $key => $value) {
            if ($value == $news_id) {
                unset($massive[$key]);
            }
        }
        $record = json_encode($massive);
        $result = $link->prepare("UPDATE `user` SET `events` = :record WHERE `id` = :user_id");
        $result->execute(array('record' => $record, 'user_id' => $user_id));
        return true;
    }
    return false;
}

Ошибка возникает при выполнении данного скрипта

 public static function addEvent($user_id,$news_id)
{
    $user_id = intval($user_id);
    $news_id = intval($news_id);
    $link = db::getConnection();
    $result = $link->prepare("SELECT `events` FROM `user` WHERE `id` = :user_id");
    $result->execute(array('user_id' => $user_id));
    $record = $result->fetch();
    $record = $record['events'];
    if (is_string($record)) {
        $list = array();
        $list = json_decode($record);
        $list[] = $news_id;
        $record = json_encode($list);
    } else {
        $list = array();
        $list[] = $news_id;
        $record = json_encode($list);
    }
    $result = $link->prepare("UPDATE `user` SET `events` = :record WHERE `id` = :user_id");
    $result->execute(array('record' => $record, 'user_id' => $user_id));
}
Answer 1

Замените это $list = json_decode($record); на это: $list = json_decode($record, true);

Ошибка из-за того, что в результате json_decode возвращается объект stdObject, и использовать с ним $list[] = ... нельзя.

READ ALSO
fadeOut по условию. jQuery

fadeOut по условию. jQuery

Всем привет! Подскажите пожалуйстаХочу сделать появление кнопки через fadeIn, и если на неё в течении 3-х секунд не кликнуть, то она исчезнет,...

203
JSTree - не возникает событие open_node

JSTree - не возникает событие open_node

Имеем структуру: пакет-документ-страницаИмеем API, выдающее данные по запросу:

265
JQuery положить в переменную текст из элементов нескольких классов

JQuery положить в переменную текст из элементов нескольких классов

Добрый день всем, прошу вашей помощи ибо сам не могу сделать) Есть несколько дивов, с одинаковыми классами (selected), нужно чтобы в переменную...

225
Как правильно выполнить скрипт Jquery cookie?

Как правильно выполнить скрипт Jquery cookie?

Задача такая, нужно считать количество акции и вывести их в одном блоке цифрой, после перехода на раздел "акции", нужно обнулить это число...

216