Как удалить значение из массива (json формат)

240
28 октября 2017, 17:44

В куки записал json строку

[fav] => ["259","258","261","263","265"]

Каким образом на php удалить любое значение?
Пробовал и unset($_COOKIE['fav'][258]) и unset($_COOKIE['fav']['258']), ничего не подходит.

Answer 1

В куки вы записали, как вы правильно заметили, строку, поэтому все попытки удалить элемент как $_COOKIE['fav'][...] обречены на провал.
Вам следует прочитать эту куку, привести ее к виду массива, удалить то что вам не нужно, затем вписать ее обратно.
Если опустить подробности с проверкой ее наличия, то примерно так:

$fjson = $_COOKIE['fav'];
$fav = json_decode($fjson);
$remove = 258;
$fav = array_diff($fav, [$remove]);
set_cookie('fav', json_encode($fav));

способов удалить значение из массива можно придумать множество:

  • найти расхождение как в примере
  • найти позицию элемента (array-search) и удалить
  • сделать flip + unset
  • написать array_filter

и так далее.

Answer 2

Как видно что Ваш массив является ассоциативным массивом. И поэтому удаление значение из ассоциативного массива будет таким образом:

$arr = ['fav' => ["259","258","261","263","265"]];
echo "<pre>";
    print_r($arr);
echo "</pre>";
/* Это входной массив со всеми значениями:
Array
(
    [fav] => Array
        (
            [0] => 259
            [1] => 258
            [2] => 261
            [3] => 263
            [4] => 265
        )
)
*/
$del_val = "259";
$sub_arr = "fav";
if (($key = array_search($del_val, $arr[$sub_arr])) !== false) {
    unset($arr[$sub_arr][$key]);
}
echo "<pre>";
    print_r($arr);
echo "</pre>";

Это вид массива после удаление значение 259 из под массива fav

Array
(
    [fav] => Array
        (
            [1] => 258
            [2] => 261
            [3] => 263
            [4] => 265
        )
)
Answer 3

Если упустить мометы с json и так далее, то не удалялось потому что вы пытались удалить по значению, а надо по индексу.

unset($_COOKIE['fav'][1])

Для удаления элемента со значением "258"

unset($_COOKIE['fav'][2])

Для удаления элемента со значением "261"

READ ALSO
При переходе на другой url не сохраняется $_SERVER[&#39;PHP_AUTH_USER&#39;] и $_SERVER[&#39;PATH_AUTH_PW&#39;]

При переходе на другой url не сохраняется $_SERVER['PHP_AUTH_USER'] и $_SERVER['PATH_AUTH_PW']

ЗдравствуйтеСделала http аутентификациюю Она работает, но почему-то при переходе на url другого вида выбивается ошибка о том, что $_SERVER['PHP_AUTH_USER']...

178
Как реализовать переподключение к БД в ооп-стиле php?

Как реализовать переподключение к БД в ооп-стиле php?

Доброго времени сутокПишу свой класс, наследуюсь от класса mysqli с целью прикрутить метод query() с автоматическим переподключением к базе, если...

157
Отправка письма админу и клиенту PHP

Отправка письма админу и клиенту PHP

ЗдравствуйтеПодскажите, как реализовать отправку на почту отправителя заявки с сайта и админа

167
Загрузка страницы aliexpress

Загрузка страницы aliexpress

Питаюсь парсить карточку товаров aliexpress сначала думал буду парсить через Simple HTML DOM но перейдя на мобильную версию, вижу что все ответы получают...

254