Извлечение описания из данных EXIF ​​и исключение дублированного текста

Я работаю над галереей изображений с портретами, где я извлекаю текст из данных Exif. Когда я редактирую изображения, я пишу имена людей, которых я позже показываю в моей галерее изображений в качестве подписей.

Я хотел бы сделать список, но не могу понять, как превратить его в массив, из которого я могу исключить дубликаты с помощью array_unique(),

Мой код:

$imgdir = 'images/'; //pick your folder ie.: 'images/'
$current_folder = basename(dirname(__FILE__));
$allowed_types = array('png','jpg','jpeg','gif');

$dimg = opendir($imgdir);
while($imgfile = readdir($dimg)){
    if(in_array(strtolower(substr($imgfile,-3)),$allowed_types)){
        $a_img[] = $imgfile;
        sort($a_img);
        reset ($a_img);
    }
}
$totimg = count($a_img);

?><!DOCTYPE html>
<html>
<head>
    <title>Names listing</title>
</head>
<body>
<?php
for ($x=0; $x < $totimg; $x++){
    if ($x == ($totimg-1))
        $_content = (exif_read_data('images/'.$a_img[$x])[ImageDescription]).'';
    else
        $_content = (exif_read_data('images/'.$a_img[$x])[ImageDescription]).', ';
    $_unique = $_content;
    echo $_unique;
}    
?>
</body>
</html>

Если у меня есть несколько изображений с одним человеком, я получаю список вроде:

John, John, Jane, Jane, Jane, ... etc.

Что я хотел бы это:

John, Jane, ... etc.

Заранее спасибо.

1 ответ

Решение

Вы должны хранить все ImageDescription значения во временном массиве (например, $descriptions), затем после завершения цикла array_unique() на временном массиве для удаления дубликатов, затем вы можете произвольно алфавитировать значения и, наконец, преобразовать оставшиеся значения в строку, используя implode() с запятой и пробелом, разделяющими значения.

for($x=0; $x<$totimg; ++$x){
    $descriptions[]=exif_read_data('images/'.$a_img[$x])[ImageDescription];
}
$descriptions=array_unique($descriptions);       // remove duplicates before sorting
sort($descriptions);                             // sort alphabetically
echo implode(', ',$descriptions);                // display csv
Другие вопросы по тегам