-1

重複の可能性:
PHP での !in_array の使用 - 条件付きステートメント

私は反対のことをしているこのコードを持っています。

1,2,3,3,4,5の配列があるとしましょう

while ($row = mysql_fetch_assoc($result)) {

    $item = $row['item'];
    echo $item . '<br />'; // for testing
    $items[] = $row['item'];
    if (!in_array($item, $items)) {

        $output[] = $row;

        foreach ($items as $item) {
            echo 'Array thus far: ' . $item . '<br />';  // for testing
        }
    } 

}

基本的に、配列に重複がないようにしたい。テスト コードは最終的に 1,2,3,4,5 を出力するはずですが、実際には 1,2,3,3,4,5 を出力します。

実際の出力は次のとおりです。

Avengers
Array thus far: Avengers
Avengers
Array thus far: Avengers
Array thus far: Avengers
American Dad!
Array thus far: Avengers
Array thus far: Avengers
Array thus far: American Dad!
American Dad!
Array thus far: Avengers
Array thus far: Avengers
Array thus far: American Dad!
Array thus far: American Dad!
Christopher Columbus
Array thus far: Avengers
Array thus far: Avengers
Array thus far: American Dad!
Array thus far: American Dad!
Array thus far: Christopher Columbus
Avatar
Array thus far: Avengers
Array thus far: Avengers
Array thus far: American Dad!
Array thus far: American Dad!
Array thus far: Christopher Columbus
Array thus far: Avatar
Kung Pao Chicken
Array thus far: Avengers
Array thus far: Avengers
Array thus far: American Dad!
Array thus far: American Dad!
Array thus far: Christopher Columbus
Array thus far: Avatar
Array thus far: Kung Pao Chicken
The Brak Show
Array thus far: Avengers
Array thus far: Avengers
Array thus far: American Dad!
Array thus far: American Dad!
Array thus far: Christopher Columbus
Array thus far: Avatar
Array thus far: Kung Pao Chicken
Array thus far: The Brak Show
Avengers
Array thus far: Avengers
Array thus far: Avengers
Array thus far: American Dad!
Array thus far: American Dad!
Array thus far: Christopher Columbus
Array thus far: Avatar
Array thus far: Kung Pao Chicken
Array thus far: The Brak Show
Array thus far: Avengers
The Brak Show
Array thus far: Avengers
Array thus far: Avengers
Array thus far: American Dad!
Array thus far: American Dad!
Array thus far: Christopher Columbus
Array thus far: Avatar
Array thus far: Kung Pao Chicken
Array thus far: The Brak Show
Array thus far: Avengers
Array thus far: The Brak Show
Space Ghost: Coast to Coast
Array thus far: Avengers
Array thus far: Avengers
Array thus far: American Dad!
Array thus far: American Dad!
Array thus far: Christopher Columbus
Array thus far: Avatar
Array thus far: Kung Pao Chicken
Array thus far: The Brak Show
Array thus far: Avengers
Array thus far: The Brak Show
Array thus far: Space Ghost: Coast to Coast
Battlestar Galactica (2004)
Array thus far: Avengers
Array thus far: Avengers
Array thus far: American Dad!
Array thus far: American Dad!
Array thus far: Christopher Columbus
Array thus far: Avatar
Array thus far: Kung Pao Chicken
Array thus far: The Brak Show
Array thus far: Avengers
Array thus far: The Brak Show
Array thus far: Space Ghost: Coast to Coast
Array thus far: Battlestar Galactica (2004)
Potstickers
Array thus far: Avengers
Array thus far: Avengers
Array thus far: American Dad!
Array thus far: American Dad!
Array thus far: Christopher Columbus
Array thus far: Avatar
Array thus far: Kung Pao Chicken
Array thus far: The Brak Show
Array thus far: Avengers
Array thus far: The Brak Show
Array thus far: Space Ghost: Coast to Coast
Array thus far: Battlestar Galactica (2004)
Array thus far: Potstickers
Potstickers
Array thus far: Avengers
Array thus far: Avengers
Array thus far: American Dad!
Array thus far: American Dad!
Array thus far: Christopher Columbus
Array thus far: Avatar
Array thus far: Kung Pao Chicken
Array thus far: The Brak Show
Array thus far: Avengers
Array thus far: The Brak Show
Array thus far: Space Ghost: Coast to Coast
Array thus far: Battlestar Galactica (2004)
Array thus far: Potstickers
Array thus far: Potstickers
Avatar
Array thus far: Avengers
Array thus far: Avengers
Array thus far: American Dad!
Array thus far: American Dad!
Array thus far: Christopher Columbus
Array thus far: Avatar
Array thus far: Kung Pao Chicken
Array thus far: The Brak Show
Array thus far: Avengers
Array thus far: The Brak Show
Array thus far: Space Ghost: Coast to Coast
Array thus far: Battlestar Galactica (2004)
Array thus far: Potstickers
Array thus far: Potstickers
Array thus far: Avatar

ここには繰り返し項目があり、配列から除外しようとしています。

4

2 に答える 2

2

への挿入を保護し$outputていますが、実際$itemsにはまったく保護されていない印刷を行っています。

結果セットの予想されるサイズと重複の可能性のあるパーセンテージによっては、重複を許可してからフィルターで除外する方がはるかに高速になる可能性があることも考慮してくださいarray_unique(これには追加のメモリが必要であり、従来の時間/空間のトレードオフと見なすことができます)。 )。

于 2012-10-04T21:56:42.687 に答える
1

次の操作を行った後、プッシュ$row['item']する必要があります。$itemsin_array()

while ($row = mysql_fetch_assoc($result)) {
    $item = $row['item'];
    echo $item . '<br />'; // for testing
    if (!in_array($item, $items)) {
        $output[] = $row;
        foreach ($items as $item) {
            echo 'Array thus far: ' . $item . '<br />';  // for testing
        }
        $items[] = $row['item'];
    }
}

または、次を削除して単純化できます$items

while ($row = mysql_fetch_assoc($result)) {
    $item = $row['item'];
    echo $item . '<br />'; // for testing
    if (!in_array($item, $output)) {
        $output[] = $row;
        foreach ($items as $item) {
            echo 'Array thus far: ' . $item . '<br />';  // for testing
        }
    }
}
于 2012-10-04T21:56:48.057 に答える