2012-05-01 85 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