2012-05-01 4 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); 
?> 

이 스크립트는 특정 날짜에 대해 가장 높은 가치를 발견하고는, false를 반환 가장 높은 값이 동일한 날짜에 동일한 경우 체크 새로운 배열 그러나 $cache같은 배열 값이 같지 않습니까?

에 저장?

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