0

我正在尝试使用for循环在数组中查找重复的值/字符串

    <?php
    $b=array('a','b','c','a','b');
    $c=count($b);
    $d=array();

    for($i=0;$i<=($c-1);$i++)
    {
        for($j=1;$j<=($c-1);$j++)
        {       

            if($b[$i]!=$b[$j])
            {       
             $flag=1;   
            }

        }

        if($flag==1)
        {
        $d[$i]=$b[$i];
        }

    }   

    print_R($d);
    ?>

我的错误在哪里?我使用数组 $d 来显示非重复值.....

注意:我需要使用循环来尝试这个for- 我知道如何使用数组函数来做到这一点。

4

3 回答 3

1

您应该反转您的测试,因为几乎总是存在与您正在测试的值不同的值。并且您必须$flag在内部循环之前重置您的,否则它将始终为真。

当您想找到唯一值时,您可以只进行测试$d。如果该值已经在 中$d,请跳过它。

$c1 = count($b);
for ($i = 0; $i < $c1; $i++) {
    $dup = 0;
    $c2 = count($d);
    for ($j = 0; $j < $c2; $j++) {
        if ($b[$i] == $d[$j])
            $dup = 1;
    }

    if (!$dup)
        $d[] = $b[$i];
}

print_r($d);

如果您想查找没有重复项的值

for ($i = 0; $i < $c; $i++) {
    $dup = 0;
    for ($j = 0; $j < $c; $j++) {
        if ($i != $j && $b[$i] == $b[$j])
            $dup = 1;
    }

    if (!$dup)
        $d[] = $b[$i];
}
于 2012-12-26T21:48:38.903 回答
0
function has_dupes($array){
    $dupe = array();

    foreach($array as $val){
         if(++$dupe[$val] > 1)
             return true;
    }
    return false;
 }

可以做这样的事情..这将检查欺骗,然后你可以打印唯一

于 2012-12-26T21:49:00.237 回答
-1

你为什么要把一个简单的任务复杂化..简单

$b = array('a','b','c','a','b');
var_dump(customCount($b));

输出

array (size=3)
  'a' => int 2 //duplicate 
  'b' => int 2 //duplicate 
  'c' => int 1

使用的功能

function customCount($array) {
    $temp = array();
    foreach ( $array as $v ) {
        isset($temp[$v]) or $temp[$v] = 0;
        $temp[$v] ++;
    }

    return $temp ;
}
于 2012-12-26T21:48:59.363 回答