条件

2016-12-13 4 views
3
$array = [ [ 'Name' => 'Product 1', 'Quantity' => 0, 'Price' => 70 ], 
      [ 'Name' => 'Product 2', 'Quantity' => 2, 'Price' => 100 ], 
      [ 'Name' => 'Product 3', 'Quantity' => 2, 'Price' => 120 ] ]; 

echo min(array_column($array, 'Price')); // 70 

それは私にmin価格を得るんに基づいて配列から最小/最大値を取得しますが、私はまた、最低となり、その場合100には、数量をチェックします。条件

ルーピングなしでこれを行うためのエレガントな方法はありますか?

+2

あなたは数量が0よりも大きい最低価格を見つけようとしていますか? –

+0

@ObjectManipulatorはい、そうです。 – 3zzy

+0

アレイの列はメモリの無駄です。配列をループする – peter

答えて

1

array_filterレスキュー!

分間チェックする前に、そして

$filtered=array_filter($array,function($v) { return $v["Quantity"] > 0; }); 
echo min(array_column($filtered, 'Price')); 

Fiddle

それをより読みやすくするために数量が0

echo min(array_column(array_filter($array,function($v) { 
return $v["Quantity"] > 0; }), 'Price')); 

に設定されている、あなたの配列から要素を削除すべての閉鎖なしの旧式版

foreach($array as $v) 
{ 
    if($v["Quantity"]>0 && (!$min || $v["Price"]<$min)) 
    $min=$v["Price"]; 
} 

Fiddle

+0

すっきり!ありがとう:) – 3zzy

0

あなたはarray_filter()を使用して0数量と配列のインデックスをフィルタリングする必要があります。

$filtered_array = array_filter($array, function($v) { 
    return $v['Quantity']; 
}); 

echo min(array_column($filtered_array, 'Price')); 
0
$array = [[ 'Name' => 'Product 1', 'Quantity' => 0, 'Price' => 70], 
      ['Name' => 'Product 2', 'Quantity' => 2, 'Price' => 100], 
      ['Name' => 'Product 3', 'Quantity' => 2, 'Price' => 120]]; 

    $price=array(); 

    for($i=0; $i<count($array);$i++){ 
     $price[$i]=$array[$i]['Price']; 
    } 

    echo min($price); //70