2012-05-01 87 views
0
<?php 
$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('Tom','2012-03-31',5), 
    array('John','2012-04-02',5), 
    array('John','2012-04-02',21), 
    array('John','2012-03-07',21) 
); 

$cache = array(); 
foreach ($bigArray as $v) { 
    if (isset($cache[$v[1]])) { 
     if ($cache[$v[1][1]] == $v[2]) { 
      echo "Equal"; 
      $cache[$v[1]] = array($v[0].','.$cache[$v[1]][0], $v[2]);//append user to same value 
     } 
     else if ($cache[$v[1][1]] < $v[2]) { 
      echo "Replacing value! ".$cache[$v[1]][0]. " to " .$v[0]."<br/>"; 
      $cache[$v[1]] = array($v[0], $v[2]); 
     } 
    } else { 
     $cache[$v[1]] = array($v[0], $v[2]); 
    } 
} 

print_r($cache); 
?> 

這個腳本查找最高值特定日期並將其保存到一個新的數組$cache相同的數組值不相等?

但是如果檢查的最高值是在同一天相等時,則返回false?

array(
    array('Doe','2012-03-31',5), 
    array('Tom','2012-03-31',5), 
) 

上面的數組是什麼令我困惑。不應該算作比賽嗎?

輸出:

Replacing value! John to Doe 
Replacing value! Doe to Tom 
Replacing value! John to John 
Array 
(
    [2012-03-29] => Array 
    (
     [0] => John 
     [1] => 1 
    ) 
    [2012-03-30] => Array 
     (
     [0] => Doe 
     [1] => 1 
    ) 
    [2012-03-31] => Array 
    (
     [0] => Tom 
     [1] => 5 
    ) 
    [2012-04-02] => Array 
    (
     [0] => John 
     [1] => 21 
    ) 
    [2012-03-07] => Array 
    (
     [0] => John 
     [1] => 21 
    ) 
) 

回答

3

沒有進入太多細節,$v[1][1]似乎是相當荒謬的我。它引用了原始數組中日期字符串的第二個字符。你大概的意思:

$cache[$v[1]][1] 
+0

+1,太遲了1分鐘:) –

+0

哇,我不敢相信我沒有看到。非常感謝! – user521903

+1

這就是爲什麼使用具有明確命名鍵的關聯數組使事情變得更容易...... :) – deceze

2

我要在這裏猜測,但也許不是:

$cache[$v[1][1]] 

你應該寫:

$cache[$v[1]][1] 

細微的差別在括號:)

+0

非常感謝! – user521903