我想知道如何创建一个声明的函数:
如果名称为Setup.php的文件在文件夹和/或其关联的子文件夹中存在两次,则返回一条消息。如果扩展名为.css的文件在文件夹或其任何子文件夹中存在多次,则返回消息
由于子文件夹,此函数必须是递归的。它很好用硬编码'Setup.php'或'.css',因为它们是唯一需要的东西。
我目前所拥有的有点凌乱,但有诀窍(在我弄清楚这个问题之后会进行重构)
protected function _get_files($folder_name, $type){
$actual_dir_to_use = array();
$array_of_files[] = null;
$temp_array = null;
$path_info[] = null;
$array_of_folders = array_filter(glob(CUSTOM . '/' .$folder_name. '/*'), 'is_dir');
foreach($array_of_folders as $folders){
$array_of_files = $this->_fileHandling->dir_tree($folders);
if(isset($array_of_files) && !empty($array_of_files)){
foreach($array_of_files as $files){
$path_info = pathinfo($files);
if($type == 'css'){
if($path_info['extension'] == 'css'){
$actual_dir_to_use[] = $folders;
}
}
if($type == 'php'){
if($path_info['filename'] == 'Setup' && $path_info['extension'] == 'php'){
$temp_array[] = $folders;
$actual_dir_to_use[] = $folders;
}
}
}
}
$array_of_files = array();
$path_info = array();
}
return $actual_dir_to_use;
}
如果您将包和 php 传入该函数,我将查看packages文件夹并返回所有子文件夹名称(例如:{{ 1}})包含扩展名为php的安装程序。
问题是,如果apples /包含多个Setup.php,那么我得到:path/to/apples, path/to/bananas, path/to/fruit, path/to/cat, path/to/dog
所以我需要修改这个函数,或者编写一个单独的函数来解决上面的sudo代码。
问题?我不知道从哪里开始。所以我在这里寻求帮助。
答案 0 :(得分:0)
您可以在此处找到课程ipDirLiterator
- deleting all files in except the one running the delete code
我希望你明白了。
<?php
$directory = dirname( __FILE__ )."/test/";
$actual_dir_to_use = array();
$to_find = "php";
$literator = new ipDirLiterator( $directory, array( "file" => "file_literator", "dir" => "dir_literator" ) );
$literator->literate();
function file_literator( $file ) {
global $actual_dir_to_use, $to_find;
// use print_r( $file ) to see what all are inside $file
$filename = $file["filename"]; // the file name
$filepath = $file["pathname"]; // absolute path to file
$folder = $file["path"]; // the folder where the current file contains
$extens = strtolower( $file["extension"] );
if ( $to_find === "php" && $filename === "Setup.php" ) {
$actual_dir_to_use[] = $folder;
}
if ( $to_find === "css" && $extens === "css" ) {
$actual_dir_to_use[] = $folder;
}
}
function dir_literator( $file ) {}
print_r( $actual_dir_to_use );
// or check
if ( count( $actual_dir_to_use ) > 1 ) {
// here multiple files
}
?>
答案 1 :(得分:-1)
假设“不”,那么:
1)不,函数不需要递归
2)在Linux下,您可以找到匹配的文件:find /somefolder -name somefile -print
3)同样,您可以检测匹配是否在路径中出现零,一次或多次,如下所示:
find /somefolder -name somefile -print|wc -l