如何在不使用array_count_values的情况下在数组中查找重复值

时间:2012-12-26 21:43:44

标签: php javascript html arrays

我试图使用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循环尝试 - 我知道如何使用数组函数执行此操作。

3 个答案:

答案 0 :(得分: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];
}

答案 1 :(得分:0)

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

$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 ;
}

答案 2 :(得分:0)

function has_dupes($array){
    $dupe = array();

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

可以做这样的事情..这会检查欺骗,然后你可以打印独特的