2012-03-09 88 views
1

幅度最大使用供應商我有一個數據庫調用,我想了一些邏輯應用到以下值。我以爲我最初可以使用PHP的max但是,這似乎並不是這種情況。使用PHP邏輯

我有一個產品的三家供應商。他們可能不是所有股票的項目,我顯示,它們都提供了不同的保證金,對產品的基礎產品了,所以這就是爲什麼我不能隨便說一般的供應商1大於2的供應商等

更好
$supplier1Live = 1 
$supplier2Live = 1 
$supplier3Live = 0 

$marginSupplier1 = 20 
$marginSupplier2 = 40 
$martinSupplier3 = 50 

在這個例子中,我會想使用供應商2,因爲他們庫存的產品supplier2Live = 1,也有比誰庫存產品(supplier1)其他供應商佳緣

我的心卻是畫在一個完全空白如何編碼?

我想我可以把它添加到一個數組中,並提供:

$array = array(
    "supplier1" => array(
     "live" => 1, 
     "margin" => 20 
    ), 
    "supplier2" => array(
     "live" => 1, 
     "margin" => 40 
    ), 
    "supplier3" => array(
     "live" => 0, 
     "margin" => 50 
    ) 
); 

和運行上的東西,但不知道怎麼辦纔好。

回答

3

濾波器使用array_filter(濾波器由活== 1),然後找到最大出所得陣列(關於「餘量」值最大)

與此類似,如果我理解正確

陣列
$array = array(
    "supplier1" => array(
     "live" => 1, 
     "margin" => 20 
    ), 
    "supplier2" => array(
     "live" => 1, 
     "margin" => 40 
    ), 
    "supplier3" => array(
     "live" => 0, 
     "margin" => 50 
    ) 
); 
$res = array_filter($array,function($v){return $v["live"];}); 
$supplier = array_reduce($res, function($a, $b){ 
     return $a["margin"]>$b["margin"]?$a:$b; 
}); 
print_r($supplier); 
+0

哦,謝謝,從來不知道array_filter。現在看看它 – 2012-03-09 15:51:27

0

所以你基本上要找到supplierXLive * marginSupplierXmax

+0

沒有,我想找到誰擁有最大的餘量一個名稱(supplierx),但也有活= 1 – 2012-03-09 15:41:07

1

嘗試是這樣的:

$best_supplier = null; 
$best_supplier_margin = null; 
foreach($array as $name => $supplier) { 
    if($supplier['live']) { 
     if($supplier['margin'] > $best_supplier_margin || is_null($best_supplier_margin)) { 
      $best_supplier = $name; 
      $best_supplier_margin = $supplier['margin']; 
     } 
    } 
} 

if(is_null($best_supplier)) throw new Exception('No suppliers are live!'); 

echo $best_supplier;