Как сравнить данные в сеансе с PHP?
Вопрос
$_SESSION имеет следующий массив данных.
Array (
[totalprice] => 954
[cart] => Array (
[115] => Array (
[name] => MÅNESKINN
[price] => 268.00
[count] => 1 )
[80] => Array (
[name] => DELFINLEK
[price] => 268.00
[count] => 1 )
[68] => Array (
[name] => OPPDAGELSEN
[price] => 418.00
[count] => 1 ) )
[shipping] => 65 )
Теперь мне нужно сравнить цену и найти самую высокую цену, чтобы определить стоимость доставки по следующему коду.
...
$shippingprice = 25.0;
if ( $priceincart > 268 ){
$shippingprice = 65.0;
}
...
$_SESSION['shipping'] = $shippingprice;
Как мне найти самую высокую цену из массива?
Заранее спасибо.
Решение
Попробуйте этот простой алгоритм:
$max = 0;
foreach ($_SESSION['cart'] as $item) {
if ($item['price'] > $max) {
$max = $item['price'];
}
}
Он перебирает товары в корзине и проверяет, превышает ли цена товара текущий максимум, и обновляет максимум, если он больше.
Другие советы
Это должно работать, хотя предполагается, что версия PHP >= 5.3.
$max_price = array_reduce($array['cart'], function($acc, $in) {
return max($acc, $in['price']);
}, 0) or $max_price = 0;
Учитывая начальную наименьшую цену (0 ноль), array_reduce вызовет функцию обратного вызова для каждого элемента $array['cart'] (где каждый элемент также является массивом), а затем вызванная функция вернет максимум $acc или $in['цена'].Это максимальное значение затем будет передано в функцию обратного вызова (как $acc) при следующем вызове.
Если array_reduce() возвращает NULL, $max_price устанавливается в ноль.