2013-09-24 2 views
0

У меня есть массив с вложенным массивом в нем, как показано ниже.Обновление массива общей цены при отправке пользователем

cart ( 
[total] => 98 
[itemcount] => 3 
[items] => Array ([0] => 0 [1] => 3 [2] => 5) 
[itemprices] => Array ([0] => 33.00 [3] => 32.00 [5] => 33) 
[itemqtys] => Array ([0] => 1 [3] => 1 [5] => 1) 
[iteminfo] => Array ([0] => Chemistry [3] => Additional Mathematics [5] => Physics) 
) 

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

$anewvalue = 16.50; 
$physubject = "Physics"; 
$index = array_search($physubject , $cart->iteminfo); 
if (false !== $index) { 
$cart->itemprices[$index] = $anewvalue;} 

Проблема заключается в том, что, как обновить общее всякий раз, когда ключ пользователя в правильный код скидки и отправьте форму, так что общая стоимость будет всегда в курсе, потому что теперь он не делает этого.

+0

Вам нужно будет где-то сохранить это значение. Плоский файл, База данных и т. Д. – andrewb

+0

@andrewb Могу ли я сохранить его в сеансе? –

+0

Сеанс пользователей? Это будет уничтожено, когда пользователь выйдет из системы. Объясните свои требования. – andrewb

ответ

0

Вам необходимо пересчитать сумму каждый раз, когда применяется соответствующая скидка.

if (false !== $index) { 
    $cart->itemprices[$index] = $anewvalue; 
    //re-calculate the total 
    $total = 0; 
    foreach ($cart->itemprices as $key=>$itemprice) { 
     $total += $itemprice * $cart->itemqtys[$key]; 
    } 
    $cart->total = $total 
} 
+0

Спасибо! Это работает, но мне нужно поставить foreach в каждом случае коммутатора? –

+0

Я действительно не уверен, как вы реализуете свой корпус коммутатора, но я предполагаю, что вы используете корпус переключателя для каждой скидки. Если это так, вы можете на самом деле применить общий пересчет после завершения работы корпуса коммутатора. – Vincent

+0

Хорошо, понял. Спасибо брат. –

Смежные вопросы