2016-10-14 162 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循環中。只需將所有元素推送到一個數組,然後刪除重複項,然後根據需要獲取值。試試以下代碼。

$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將包含無重複,並且將回聲每個圖像(包括重複)。

+0

@ mister martin,如果在循環結束後使用'array_unique($ listImages)',它將被優化。現在你每次都進行循環檢查。 –

+0

爲什麼要投票...如果回答是正確的,並且與您不同@mister martin –

+0

我想要在foreach循環中打印每個值。所以在循環結束後不能使用'array_unique($ listImages)' – Bandara

0

基於@mistermartins回答:

$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

應該更快地使用包含HashMap:

$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

我不知道如果我完全瞭解你。後續的方法爲我工作,以使用foreeach循環從數組中刪除重複的指標。

$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] =>彼得)