Как удалить повторяющиеся значения из массива в цикле foreach?

Я хочу удалить повторяющиеся значения из массива. Я знаю, чтобы использовать array_unique(array) функционировать, но столкнулся с проблемой в foreach петля. Это не повторяющийся вопрос, потому что я прочитал несколько вопросов, касающихся этого, и большинство из них заставляют использовать array_unique(array) функция, но я понятия не имею, использовать его в foreach петля. Вот моя функция PHP.

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

Как это сделать?

2

Решение

Удалить дублирующиеся значения из массива внутри цикла 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;
}
5

Другие решения

Приведенный вами пример может быть изменен следующим образом:

$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

На основании ответа @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

Должно быть быстрее использовать 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
}
}
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] => Питер)

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector