试图比较两个数组中的值

时间:2013-12-06 18:49:54

标签: php arrays foreach comparison

我在网页上有一个用户列表,我正在尝试将每个用户名与数组中的用户列表进行比较。但由于某种原因,以下代码始终返回false。某些用户名匹配,因此应在用户名旁边显示“是”。

foreach($result AS $user){
    foreach($listarray AS $name){
        if($user['username'] == $name){
            $whitelisted = 'Yes';
        } else {
            $whitelisted = 'No';
        }
    }
    echo '<tr><td><p>'.$user['username'].'</p></td><td><p>'.$user['location'].'</p></td><td><p>'.$user['date_joined'].'</p></td><td><p>'.$whitelisted.'</p></td>';
}

为什么即使某些名称匹配,此比较也会返回false?

5 个答案:

答案 0 :(得分:1)

当您找到匹配项时,需要使用break命令退出循环。现在,您的代码循环遍历$ result中的每个值,然后它获取该值并将其与$ listarray中的每个值进行比较。它不是并排比较的。

答案 1 :(得分:1)

如果存在匹配元素,则需要break内部foreach循环。或者,您可以使用in_array函数检查数组中是否存在值

foreach($result AS $user){
    $whitelisted = 'No';
    if (in_array($user['username'], $listarray ))
    {
       $whitelisted = 'Yes';
    }
    echo '<tr><td><p>'.$user['username'].'</p></td><td><p>'.$user['location'].'</p></td><td><p>'.$user['date_joined'].'</p></td><td><p>'.$whitelisted.'</p></td>';
}

答案 2 :(得分:1)

比较的结果被分配给一个简单的变量,每次都会覆盖它。这样,如果最后一个是假的,它将永远是假的。而且,第二个foreach将在返回第一个之前执行所有迭代。可以使用continue;

修复此问题
foreach($result AS $user){
  foreach($listarray AS $name){
    if($user['username'] == $name){
        $whitelisted = 'Yes';
        continue; // that way when conpared as true, your other foreach can display result
    } else {
        $whitelisted = 'No';
    }
}
echo '<tr><td><p>'.$user['username'].'</p></td><td><p>'.$user['location'].'</p></td><td><p>'.$user['date_joined'].'</p></td><td><p>'.$whitelisted.'</p></td>';
}

答案 3 :(得分:0)

foreach($result AS $user){
    $whitelisted = 'No';
    foreach($listarray AS $name){
        if($user['username'] == $name){
            $whitelisted = 'Yes';
        }
    }
    echo '<tr><td><p>'.$user['username'].'</p></td><td><p>'.$user['location'].'</p></td><td><p>'.$user['date_joined'].'</p></td><td><p>'.$whitelisted.'</p></td>';
}

答案 4 :(得分:0)

$a = array('me', 'you', 'ours');
$b = array('me', 'mine', 'you');

$merge = array_merge($a, $b); // MERGER ARRAY
$dups = array_count_values($merge); // COUNT DUPLICATES

// STORE ALL DUPLICATED VALUES
$dup = array();
foreach($dups as $k => $v) {
    if($v > 1) {
        $dup[] = $k;
    }
}

echo '<pre> Duplicates: '; print_r($dup); echo '</pre>';

结果:

 Duplicates: Array
(
    [0] => me
    [1] => you
)

查看我的PHP小提琴:http://phpfiddle.org/main/code/t71-4db