php中的重复文件

时间:2013-07-05 15:46:46

标签: php arrays duplicates

我想知道如何创建一个声明的函数:

如果名称为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代码。

问题?我不知道从哪里开始。所以我在这里寻求帮助。

2 个答案:

答案 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