2012-05-01 11 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]は、私にはかなり無意味であると考えられます。元の配列の日付文字列の2番目の文字を参照します。あなたは、おそらく意味:

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

+1は1分遅れました:) –

+0

うわー、私はそれが見えなかったとは思えません。どうもありがとうございます! – user521903

+1

これは、明示的に名前が付けられたキーを持つ連想配列を使って作業することで、作業が楽になる理由です: – deceze

2

私は多分代わりに、ここで推測するつもりです:

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

あなたが書く必要があります:

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

若干の差が中括弧で:)

+0

ありがとうございました! – user521903

関連する問題