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
    )
)
4

2 に答える 2

3

あまり詳しく説明しないと$v[1][1]、私にはまったく無意味に思えます。元の配列の日付文字列の 2 番目の文字を参照します。あなたはおそらく次のことを意味します:

$cache[$v[1]][1]
于 2012-05-01T02:26:20.290 に答える
2

ここで推測しますが、おそらく代わりに:

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

あなたは書くべきです:

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

ブレースのわずかな違い:)

于 2012-05-01T02:27:25.513 に答える