#php
#php
Вопрос:
Я искал в Stackover аналогичную проблему, но не могу найти решения.
Я пытаюсь написать скрипт, который просматривает содержимое двух каталогов, чтобы выяснить, можно ли найти совпадение имени файла в обоих каталогах. Если совпадение найдено, запишите имя совпадающего имени файла в массив.
Первое, что я делаю, это использую «scandir» для создания массива данных из первого каталога. В цикле «foreach» просмотрите массив из результата «scandir» и выполните команду «file_exists», используя переменную «$image1», чтобы найти совпадение в секундном каталоге «allimages / boardsclean». Если совпадение найдено, запишите имя файла в массив «$found_images».
Тестируя результат массива «$found_images», я не вижу ожидаемого результата.
Может ли кто-нибудь увидеть, где я ошибаюсь?
$c1 = 0;
$c2 = 0;
$scan = scandir('allimages/temp1');
$found_images = array();
foreach ($scan as $image1) {
if (file_exists('allimages/temp1/'.$image1) amp;amp; ('allimages/temp2/'.$image1)) {
echo "file match in Scan $image1</br>";
$found_images[] = 'allimages/adminclean/'. $image1;
$c1 ;
}
}
echo $c1."</br>";
foreach ($found_images as $image3) {
echo "file match $image3 </br>";
$c2 ;
}
echo $c2."</br>";
Комментарии:
1.
amp;amp; ('allimages/temp2/'.$image1)
это выглядит немного неуместно.2. @Remy Привет, когда ты говоришь «это выглядит немного не так», что ты имеешь в виду?
3. Я бы предположил, что вы хотите проверить, существует ли этот файл, теперь он заключен только в круглые скобки. Ваше текущее условие будет оцениваться
true
как, еслиfile_exists('allimages/temp1/'.$image1)
теперь true . Итак, я предполагаю, что вы хотели протестировать:file_exists('allimages/temp1/'.$image1) amp;amp; file_exists('allimages/temp2/'.$image1)
4. @Remy Смотрит на строку «if (file_exists(‘allimages/ temp1/’.$image1) amp;amp; (‘allimages/ temp2/’.$image1)) {» для меня это выглядит правильно. Это не приводит к каким-либо синтаксическим ошибкам.
5. это синтаксически правильно, но это логическая ошибка : p.
('allimages/temp2/'.$image1)
это не проверяет наличие файла.
Ответ №1:
Во-первых, вам не нужно проверять наличие файла из scandir
, потому что, ну … он уже есть и был возвращен. Во-вторых, вы не проверяете имя файла во втором каталоге. Вам нужно:
if(file_exists('allimages/temp2/'.$image1)) {
Однако просто просканируйте оба каталога и вычислите пересечение возвращенных массивов, что даст вам файлы, общие для обоих каталогов. Это так же просто, как:
$found = array_intersect(scandir('allimages/temp1'), scandir('allimages/temp2'));
Затем вы можете отфильтровать каталоги, если хотите, и добавить allimages/adminclean/
в массив или при необходимости.
Комментарии:
1. Привет, большое спасибо за ваш реплей. Я не думал использовать array_intersect. Работает отлично. После заполнения массива $found я затем использовал $result = array_unique($found); для удаления любых повторяющихся имен файлов.