Как сравнить данные в сессии с PHP? - PullRequest
0 голосов
/ 10 января 2010

$ _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;

Как найти самую высокую цену в массиве?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 10 января 2010

Попробуйте этот простой алгоритм:

$max = 0;
foreach ($_SESSION['cart'] as $item) {
    if ($item['price'] > $max) {
        $max = $item['price'];
    }
}

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

0 голосов
/ 10 января 2010

Это должно работать, хотя предполагается версия 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 устанавливается в ноль.

...