2013-10-01 56 views
2

我有如下數組:PHP檢索最小值在2D關聯數組

Array 
    (
    [0] => Array 
     (
       [id] => 1 
       [price1] => 16 
       [price2] => 10 
       [price3] => 3 
     ) 

    [1] => Array 
     (
      [id] => 2 
      [price1] => 19 
      [price2] => 2 
      [price3] => 6 
     ) 

    [2] => Array 
     (
      [id] => 3 

      [price1] => 14 
      [price2] => 32 
      [price3] => 1 
     ) 

) 

我想從每行獨立於其他行較低的價格。例如對於id=1,較低的價格是3,對於id=2較低的是2等等。任何想法如何自動化這一點。

+0

您可能需要使用''分在'foreach'環()。 http://php.net/manual/en/function.min.php – Mina

回答

1

可能的解決辦法:

Demo

foreach($array as $item) 
{ 
    $lowestKey = ''; 
    foreach($item as $key => $value) 
    { 
     if(strpos($key, 'price') === 0) 
     { 
      if($lowestKey == '') 
      { 
       $lowestKey = $key; 
      } 
      else 
      { 
       if($value < $item[$lowestKey]) 
       { 
        $lowestKey = $key; 
       } 
      } 
     } 
    } 

    echo 'lowest for id ' . $item['id'] . ': ' . $item[$lowestKey]; 
} 

這種方法的好處是:

  • 價格鍵不必是連續的,甚至數值。任何以price開頭的密鑰都視爲價格。
  • 可以有無限的價格,它不限於三個。
  • 存儲在數組中的任何其他數據都不會影響它或破壞任何內容。例如,如果將來您添加了一個description密鑰,它不會影響代碼或需要進行任何修改。
+0

非常感謝,它完美的工作 –

-1

嘗試可以幫助:

$price = array(); 
foreach($array as $key=>$each){ 
    $low = $each['price1']; 
    if($each['price2'] < $low){ 
     $low = $each['price2']; 
    } 
    if($each['price3'] < $low){ 
     $low = $each['price3']; 
    } 
    $price[$key] = $low; 
} 

print_r($price); 
0

試試這個:

$newarray = array(); 
foreach ($array as $row) 
{ 
    $id = $row['id']; 
    unset($row['id']); 
    $newarray[$id] = min($row); 
} 

你去那裏。 $newarray現在包含每行的id => {lowest value}

0
$r = array_reduce($array, function(&$result, $item) { 

    $key = $item['id']; 
    unset($item['id']); 
    $result[$key] = min($item); 
    return $result; 

}); 
0

嘗試以下:

$prices = array(0 => array ('id' => 1, 
         'price1' => 16, 
         'price2' => 10, 
         'price3' => 3 
         ), 

      1 => array ('id' => 2, 
         'price1' => 19, 
         'price2' => 2, 
         'price3' => 6 
       ), 

      2 => array ('id' => 3, 
         'price1' => 14, 
         'price2' => 32, 
         'price3' => 1 
       ) 

    ); 



foreach($prices as $price) { 
    $tmp_arr = array(0=> $price['price1'], 1=> $price['price2'], 2=> $price['price3']); 
    sort($tmp_arr); 
    $arr_low_price = array('id'=> $price['id'], 'low_price' => $tmp_arr[0]); 
    print_r($arr_low_price); 
    echo '<br />'; 
}