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ます。そうしないと、常にtrueになります。

一意の値を見つけたい場合は、に対して$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;
 }

このようなことをすることができます..これは重複をチェックし、次にuはユニークを印刷することができます

于 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 に答える