Здравствуйте! Помогите заменить подстроку в строке, если выполняются условия. (для корзины интернет-магазина). Допустим, в корзине уже есть товары, и переменная выглядит так: Код (Text): "10":{"color": 20, "size": 30, "count": 2},"11":{"color": 21, "size": 31, "count": 4}, При добавлении в корзину товара с ID 10 должно измениться только его количество и результат должен быть таким: Код (Text): "10":{"color": 20, "size": 30, "count": 3},"11":{"color": 21, "size": 31, "count": 4}, Но что-то в цикле if ($a[$i]==$test) не срабатывает. Мучаюсь 2й день, не понимаю где упустил. PHP: $id = intval(10); //айди товара $color = intval(20); //цвет товара $size = intval(30); //размер товара $count = 3; //количество таких же товаров в корзине //строка, которая сформировалась, решаем добавлять ее (если такого товара еще нет) или нет (если такой товар в корзине уже есть то нужно только изменить количество товаров в этом товаре) $podstroka = '"'.$id.'":{"color": '.$color.', "size": '.$size.', "count": '.$count.'},'; //допустим, это сейчас уже есть в сессии $sessya = 'xxx"10":{"color": 20, "size": 30, "count": 2},xxx"11":{"color": 21, "size": 31, "count": 4},'; //просчитываем количество товаров для возможносуществующего такого же товара в корзине if ($count <= 1) { $newcount = 1; } else if ($count > 1) { $newcount = $count - 1; } //--конец просчета //формируем строку для сравнения, есть ли уже такой товар в корзине с количеством минус 1 от текущего счетчика $test = '"10":{"color": 20, "size": 30, "count": 2},'; //создаем массив из того, что есть в сессии с разделителем "ххх" $massiv = explode('xxx', $sessya); foreach ($massiv as $a): { for ($i=1; $i<count($a); $i++) { if ($a[$i]==$test) { $a[$i] = $podstroka; } } echo $a; } endforeach;
1) Корзина на сервере считается? Не на клиенте? 2) Строка очень похожа на JSON, но странный. Быть может имеет смысл использовать реальный валидный JSON и просто десериализовывать его перед обработкой данных и, после обработки, сериализовывать обратно в строку?
1) на сервере 2) точно. С каждым новым приходом переменных (т.е. с каждым добавлением товара в корзину) формирую JSON. С ним сталкиваюсь впервые, поэтому он странный, видать не все еще знаю. Однако, проблему решил. Подстрока адекватно находится в строке и количество товаров увеличивается на единицу. Спасибо.
Не надо ничего искать и менять. Есть функции для работы с JSON на стороне PHP: json_decode и json_encode. Пользуйся ими.