我有一个数组,其值是图像名称:
Array
(
[rocks] => rocks.jpg
[stone] => stone.jpg
[bird] => bird.jpg
...
)
我想扫描3个目录,这些目录都在同一个文件夹中,并匹配任何匹配任何数组值的图像。目录结构如下:
images
nature
animals
misc.
我知道scandir()
但不确定如何考虑多个目录。我最终想将这些匹配的图像复制到一个新目录中。这可以用PHP吗?
任何想法或例子都会非常有帮助。
感谢。
答案 0 :(得分:3)
您可以使用glob查找文件,但您将在某种程度上仅限于当前结构。
例如:
$files = [];
foreach($filenames as $filename) {
$files = array_merge($files, glob('images/*/'.$filename));
}
glob会搜索匹配' $ filename'在图像的任何子目录中。如果你想要比这更深入,你必须创建一个递归函数。
答案 1 :(得分:1)
您可以简单地使用两个嵌套循环:
foreach(array_values($images) as $img) {
foreach(array(
'images/nature',
'images/animals',
'images/misc.'
) as $path) {
if(file_exists("$path/$img")) {
echo "file $path/$img exists" . PHP_EOL;
}
}
}
答案 2 :(得分:1)
您可以在PHP中使用file_exists
函数。像这样:
$directories = array('nature', 'animals', 'misc.');
$found_images = array();
foreach ($image_names as $image) {
foreach ($directories as $dir) {
if (file_exists('images/' . $dir . '/' . $image) {
$found_images[] = 'images/' . $dir . '/' . $image;
}
}
}
在此之后,$found_images
将包含找到的所有图像的路径。
要将文件复制到另一个目录,只需使用copy
:
foreach ($found_images as $image) {
copy($image, 'DESTINATION_DIRECTORY/' . basename($path));
}
答案 3 :(得分:0)
这会将目录内的所有文件(递归)加载到数组
中$FILES = array();
function listFolderFiles($dir){
global $FILES;
$ffs = scandir($dir);
foreach($ffs as $ff){
if($ff != '.' && $ff != '..'){
if(is_dir($dir.$ff))
listFolderFiles($dir.$ff.'/');
else{
$FILES[] = $dir.$ff;
if(in_array($ff, $my_array))
{
copy('source_dir'.$ff, 'destination_file');
// do your stuff here
}
}
}
}
}
listFolderFiles('your_dir');
:)尽情享受!