-1

可能重复:
!in_array 在 PHP 中使用 - 条件语句

我有这个相反的代码。

假设我有 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 in_array() 函数似乎在这里与变量一起工作?

这是真实的输出:

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']执行完以下操作$items后,您需要继续in_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 回答