Reputation: 283
I want to remove duplicate values from array. I know to use array_unique(array)
function but faced problem in foreach
loop. This is not a duplicate question because I have read several questions regarding this and most of them force to use array_unique(array)
function but I have no idea to use it in foreach
loop. Here is my php function.
$images = scandir($dir);
$listImages=array();
foreach($images as $image){
$listImages=$image;
echo substr($listImages, 0, -25) ."<br>"; //remove last 25 chracters
}
How to do this?
Upvotes: 3
Views: 15448
Reputation: 3565
It is very complicated to remove duplicate values from array within foreach loop. Simply you can push all elements to one array and then remove the duplicates and then get values as you need. Try with following code.
$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;
}
Upvotes: 8
Reputation: 469
I'm not sure if I have understood you completely. Subsequent approach worked for me in order to remove duplicate indizes from array using a foreeach loop.
$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);
gives following result:
Array ( [0] => hans [1] => lara [2] => peter )
Upvotes: 0
Reputation: 3408
It should be faster to use hashmaps:
$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
}
}
Upvotes: 0
Reputation: 14862
Based on @mistermartins answer:
$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
}
Upvotes: 1
Reputation: 6252
The example you provided could be modified as follows:
$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
}
Now $listImages
will contain no duplicates, and it will echo every image (including duplicates).
Upvotes: 1