2016-10-14 10 views
2

配列から重複した値を削除したい。私はarray_unique(array)関数を使用することを知っているが、foreachループの問題に直面した。これは重複した質問ではありません。私はこれに関するいくつかの質問を読んでおり、そのほとんどがarray_unique(array)機能を使用するように強制されていますが、foreachループで使用することは考えられません。ここに私のPHP関数です。foreachループで配列から重複した値を削除するにはどうすればよいですか?

$images = scandir($dir); 
$listImages=array(); 
foreach($images as $image){ 
    $listImages=$image; 
    echo substr($listImages, 0, -25) ."<br>"; //remove last 25 chracters 
} 

どのようにするには?次のように

+4

あなたはウルの予想出力と入力 –

+2

が –

+0

はい、あなたのforeachループを終了した後array_unique使用することができ、あなたの完全な例をご指定ください投稿することができます。 –

答えて

4

には配列から重複した値を削除することは非常に複雑ですforeachループ内。すべての要素を1つの配列にプッシュしてから、重複を削除し、必要に応じて値を取得するだけです。次のコードを試してみてください。

$listImages=array(); 
    $images = scandir($dir); 

    foreach($images as $image){ 
     $editedImage = substr($image, 0, -25); 
     array_push($listImages, $editedImage); 
    } 

    $filteredList = array_unique($listImages); 

    foreach($filteredList as $oneitem){ 
     echo $oneitem; 
    } 
0

あなたが提供した例を変更することができます。今すぐ

$images = scandir($dir); 
$listImages=array(); 
foreach($images as $image) { 
    if (!in_array($image, $listImages)) { 
     $listImages[] = $image; 
    } 
    echo substr($image, 0, -25) ."<br>"; //remove last 25 chracters 
} 

$listImagesには、重複を含まないだろう、それは(重複を含む)すべての画像をエコーし​​ます。 @mistermartinsに基づいて

+0

@ mister martinの場合、ループ終了後に 'array_unique($ listImages)'を使用すると最適化されます。今は毎回ループでチェックしました。 –

+0

なぜ答えが正しければ... @mister martinと答えが違う場合 –

+0

foreachループ内のすべての値を出力したい。ループエンドの後に 'array_unique($ listImages)'を使用しないでください – Bandara

0

は答える:

$images = scandir($dir); 
$listImages=array(); 
foreach($images as $image) { 
    //if already echo'd continue to next iteration 
    if (in_array($image, $listImages)) { 
     continue; 
    } 
    //else, add image to array and echo. 
    $listImages[] = $image; 
    echo substr($image, 0, -25) ."<br>"; //remove last 25 chracters 
} 
0

ハッシュマップを使用するように速くする必要があります:

$images = scandir($dir); 
$listImages = array(); 
foreach($images as $image) { 
    if (!isset($listImages[$image])) { 
     $listImages[$image] = true; 
     echo substr($image, 0, -25) ."<br>"; //remove last 25 chracters 
    } 
} 
0

私は、私は完全にあなたを理解しているかはわかりません。その後のアプローチは、私のために働いていました。

$list = array("hans", "peter", "hans", "lara", "peter", "lara", "lara"); 
sort($list); 
foreach ($list as $k => $v) { 
    if (isset($check)) { 
     if ($check === $v) { 
      unset($list[$k]); 
     } 
    } 
    $check = $v; 
} 

$noDuplicate = array_values($list); 

print_r($noDuplicate); 

は、以下の結果が得られる:

アレイ([0] =>ハンス[1] =>ララ[2] =>ピーター)

関連する問題