-1

次のような関数を作成する方法を考えています。

Setup.php という名前のファイルが 1 つのフォルダーおよび/または関連するサブフォルダーに 2 回存在する場合は、メッセージを返します。拡張子が .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;      
}

たとえば、packagesphppath/to/apples, path/to/bananas, path/to/fruit, path/to/cat, path/to/dogを関数に渡すと、packages フォルダーを調べて、拡張子が php の Setup を含むすべてのサブフォルダー名 (例: ) を返します。

問題は、apples/ に複数の Setup.php が含まれている場合、次のようになります。path/to/apples, path/to/apples, path/to/bananas, path/to/fruit, path/to/cat, path/to/dog

したがって、この関数を変更するか、上記の sudo コードを満たす別の関数を作成する必要があります。

問題?どこから始めればよいかわかりません。だから私はここで助けを求めています。

4

2 に答える 2

0

ここでクラスを見つけることができますipDirLiterator-削除コードを実行しているファイルを除くすべてのファイルを削除します
あなたがそれを手に入れたことを願っています。

<?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
  }
?>
于 2013-07-05T16:17:18.873 に答える
-1

Q: これは宿題ですか?

「いいえ」と仮定すると、次のようになります。

1) いいえ、関数は再帰的である必要はありません

2) Linux では、次のような一致するファイルを見つけることができます。find /somefolder -name somefile -print

3) 同様に、次のようにパス内で一致がゼロ、1 回、または複数回発生したかどうかを検出できます。

find /somefolder -name somefile -print|wc -l

于 2013-07-05T15:53:41.550 に答える