Доработка функции на php: нужна помощь

195
07 декабря 2018, 05:30

Есть две разные cookie:

Cart содержит ID товара и количество этого товара в заказе. Пример:

{"227":2,"235":1,"242":1,"243":3}

cart_info содержит ID товара и размеры этого товара в заказе. В вышеуказанном примере:

{"227":["XL","4XL"],"235":["3XL"],"242":["L"],"243":["M","L","XL"]}

Функция обработки cart:

$items = (array)json_decode(stripslashes(@$_COOKIE['cart']), true); 
$products = $this->model->product->getByIds(array_keys($items));             
$orders2 = array(); 
foreach ($products as $product) { 
    $count = array_key_exists($product->id, $items) ? $items[$product->id] : 1; 
    $count = preg_match('@^[0-9]+$@i', $count) ? $count : 1; 
    $orders2[] = $product->name . ' (' . $count . ' шт);'; 
} 

Результат: Товар227 (2 шт); Товар235 (1 шт); Товар242 (1 шт); Товар243 (3 шт);

Функция обработки cart_info:

        $items_info = (array)json_decode(stripslashes(@$_COOKIE['cart_info']), true); 
        $message_info = ""; 
        foreach ($items_info as $key => $val) { 
            $message_info .=  $this->model->product->getById($key)->name . ": " . implode(',', array_unique($val)) . " // "; 
        }

Результат:Товар227: XL,4XL // Товар235: 3XL // Товар242: L // Товар243: M,L,XL //

Помогите написать третью функцию, которая объединит данные и даст результат вида:

Товар227 (2 шт): XL,4XL // Товар235 (1 шт): 3XL // Товар242 (1 шт): L // Товар243 (3 шт): M,L,XL //

Answer 1

Как вариант, вы можете в функции обработки cart_info собирать информацию в массив, а вывод делать через implode(string, delimiter), где в качестве индекса массива писать $this->model->product->getById($key)->id, то есть будет:

$cartInfo[$this->model->product->getById($key)->id] = $this->model->product->getById($key)->name . ": " . implode(',', array_unique($val));

В функции 1 сделать аналогично - индекс массива = ид товара.

 $orders2[$product->id] = $product->name . ' (' . $count . ' шт);'; 

И в конце что-то типо:

foreach($orders2 as $productId => $order){
    echo $order.':'.$cartInfo[$productId];
}
READ ALSO
Ajax update page

Ajax update page

Получаю ошибку:

156
Данные в массиве изменяются, как их получать без редактирования кода?

Данные в массиве изменяются, как их получать без редактирования кода?

Столкнулся с проблемой постоянного изменения вывода массива, мой массив

162
Как переделать hasOne() на hasMany() в примере?

Как переделать hasOne() на hasMany() в примере?

Как переделать данный пример используя hasMany() вместо hasOne() для отображения в ячейке GridView нескольких связанных данных из другой таблицы?

169