Как средствами php сравнить два больших массива?
1. Формируем массив array1 - имена файлов в папке - ф-я scandir
2. Формируем массив array2 - названия в БД, выборка наподобие
SELECT image_name FROM my_db
выбираем только имена image_name, то есть названия.
Форматы названий должны совпадать, то есть одинаковые картинки и в БД, и в папке должны иметь абсолютно одинаковые имена, с учетом того, что файлы в папке имеют еще и расширения. Если что - приводим строковыми ф-ями к одинаковому формату (отрезаем расширение файла например)
3. Ф-я array_diff(array1, array2) даст те элементы, которые есть в массиве array1, но нет в массиве array2.
Воу-воу, палехчи. Это всё очень круто. Но имеет избыточную сложность, особенно в плане расхода памяти. Как бы сделал я:
1. Сделал бы список файлов в папках (find /path/to/folder -name "*.jpg" >filelist.txt)
2. Грузим в php скрипте файлик file("filelist.txt") - он при этом грузится как массив. Алсо, чтобы экономить память, можно читать через fgets - немного сложнее, но зато веселее.
3. Пробегаем по этому массиву и ищем в БД. Поле с именем файла должно быть индексировано конечно.
Все файлы, что не найдены, удаляем.
Альтернативный вариант - загрузить из БД все записи в виде хеш-таблицы (то есть имена из БД должны стать индексами массива, а значениями - да что угодно). Дальше поиск производить как isset($hash[$name]).