كيفية مقارنة البيانات في الجلسة مع PHP؟

StackOverflow https://stackoverflow.com/questions/2037278

  •  19-09-2019
  •  | 
  •  

سؤال

يحتوي $ _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 باتصال بوظيفة رد الاتصال في كل عنصر من عناصر صفيف $ ['cart'] (حيث يكون كل عنصر أيضا صفيفا)، ثم ستعود الوظيفة المسعومة إلى أقصى قدر من ACC أو $ في ["السعر"]. سيتم بعد ذلك تمرير هذه القيمة القصوى إلى وظيفة رد الاتصال (ك $ acc) في المرة التالية التي يطلق عليها.

في حالة إرجاع Array_Reduce () NULL، يتم تعيين $ max_price إلى الصفر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top