2012-08-16 70 views
1

任何想法都可以創建一個函數,它將以起始價格和最終價格返回數組中的5個範圍。該功能需要爲類別或品牌或使用的任何過濾器創建這些範圍。許多電子商務網站已經在使用價格範圍過濾器。現在我可以創建這樣的功能。但在這裏我必須添加步驟範圍。有沒有辦法可以根據該類別的整體價格範圍自動進行這些步驟。爲PHP電子商務網站創建價格範圍功能的想法

function price_range($category_id=0, $step=199) 
{ 
$output = ''; 
$return = array(); 

$query = "SELECT * FROM products WHERE category = ".$category_id; 
$query .= " ORDER BY PRICE"; 
$result = mysql_query($query); 

if (!$result) 
{ 
    return FALSE; 
} 
else 
{ 
    if((mysql_num_rows($result) == 0)) 
    { 
     return FALSE; 
    } 
    else 
    { 
     while ($row = mysql_fetch_array($result)) 
     { 

      $prices = array($row['price']); 
     } 
     $ranges = array(); 

     foreach($prices as $p) 
     { 
      $index = floor($p/$step); 
      if(isset($ranges[$index])) 
       $ranges[$index]++; 
      else 
       $ranges[$index] = 1; 
     } 

     for($i = 0; $i <= max(array_keys($ranges)); $i++) 
     { 
      //$output = "(<a href=\"?start=" . ($step * $i) . "&end=" . ($step * ($i + 1)) . "\">" . ($step * ($i + 1)) . " - " . ($step * $i) . "(" . $ranges[$i] . ")<br>"; 
      $return[$i]['start'] = ($step * $i); 
      $return[$i]['end'] = ($step * ($i + 1)); 
      $return[$i]['product_count'] = $ranges[$i]; 
     } 
    } 
} 
return $return; 
} 
+0

我即將去睡覺,所以我不能創建一個完整的答案。但是,您是否已經想到了像第一次運行查詢來查找「MIN」和「MAX」價格的事情。然後'(maxprice - minprice)/ 5'找到創建數組的範圍? – arnoudhgz 2012-08-16 22:43:15

回答

0

喜歡的東西

SELECT 
    (MAX(PRICE) - MIN(PRICE))/COUNT(product) AS step 
FROM 
    products 
WHERE 
    category = ? 
GROUP BY 
    category 
0

嘗試使用範圍功能。

$steps = 5; 
$delta = floor((max($prices) - min($prices))/$steps); 
$price_steps = range(min($prices), max($prices), $delta); 

$ price_steps變爲:

array(6) { 
    [0]=> 
    float(0) 
    [1]=> 
    float(20) 
    [2]=> 
    float(40) 
    [3]=> 
    float(60) 
    [4]=> 
    float(80) 
    [5]=> 
    float(100) 
}