2012-04-30 28 views
0

我與這些值的數組:帶條件的二維數組上的最大值?

Array 
(
    [0] => Array 
    (
     [0] => John 
     [1] => 2012-03-29 
     [2] => 1 
    ) 
    [1] => Array 
    (
     [0] => Doe 
     [1] => 2012-03-30 
     [2] => 1 
    ) 
    [2] => Array 
    (
     [0] => John 
     [1] => 2012-03-31 
     [2] => 2 
    ) 
    [3] => Array 
    (
     [0] => Doe 
     [1] => 2012-03-31 
     [2] => 5 
    ) 
    [4] => Array 
    (
     [0] => John 
     [1] => 2012-04-02 
     [2] => 5 
    ) 
    [5] => Array 
    (
     [0] => John 
     [1] => 2012-04-02 
     [2] => 21 
    ) 
) 

我試圖讓array[][2]最大值爲array[][1]每個日期。

例如,陣列

Array[2][1] = 2012-03-31 | Array[2][2] = 2 
Array[3][1] = 2012-03-31 | Array[3][2] = 5 

出這兩個相同的日子裏,我想保持Array[3]和丟棄Array[2]的英寸

我試過一個foreach功能:

foreach ($days as $k) { 
    $max_vals[] = array($k[0], $k[1], max($k[2])); 
} 

但發現沒有與天工作。我怎樣才能將這個陣列保持每天的最高價值,並放棄其餘的?

回答

1

以下代碼將遍歷$ data中的每個值,或者將新遇到的日期添加到$cache或檢查它是否更大。

$cache = array(); 
// Note: $data is the array you provided above, replace with your variable name. 
foreach ($data as $k => $v) { 
    if (isset($cache[$v[1]])) { 
    if ($cache[$v[1]] < $v[2]) { 
     $cache[$v[1]] = $v[2]; 
    } 
    } else { 
    $cache[$v[1]] = $v[2]; 
    } 
} 

當完成時,$cache將與值是日期和密鑰array[][2]最大值的陣列。

1

下面就來解決這個問題的一種方法:

  • 遍歷數組用foreach

  • 在按名稱,日期foreach循環組新的數組,數

  • 與以前的值,如果比較如果數字較高,則存在並覆蓋

希望這可以幫助。

1

試試這個:

$bigArray=array(
array('John','2012-03-29',1), 
array('Doe','2012-03-30',1), 
array('John','2012-03-31',2), 
array('Doe','2012-03-31',5), 
array('John','2012-04-02',5), 
array('John','2012-04-02',21), 
array('John','2012-03-07',21) 
); 
$output=array(); 
foreach($bigArray as $element){ 
if($element[1]>$output[$element[2]]){ 
$output[$element[2]]=$element[1]; 
}} 

echo '<pre>'; 
print_r($output); 

此輸出:

Array 
(
    [1] => 2012-03-30 
    [2] => 2012-03-31 
    [5] => 2012-04-02 
    [21] => 2012-04-02 
) 

或得到相反的:

$bigArray=array(
    array('John','2012-03-29',1), 
    array('Doe','2012-03-30',1), 
    array('John','2012-03-31',2), 
    array('Doe','2012-03-31',5), 
    array('John','2012-04-02',5), 
    array('John','2012-04-02',21), 
    array('John','2012-03-07',20) 
    ); 
$output=array(); 
    foreach($bigArray as $element){ 
    if($element[2]>$output[$element[1]]){ 
    $output[$element[1]]=$element[2]; 
    }} 
echo '<pre>'; 
print_r($output); 

此打印:

Array 
(
    [2012-03-29] => 1 
    [2012-03-30] => 1 
    [2012-03-31] => 5 
    [2012-04-02] => 21 
    [2012-03-07] => 20 
) 
相關問題