2012-03-09 91 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;