Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Функция поиска по папкам.
 
 автор: Nemesis   (29.04.2007 в 00:01)   письмо автору
 
 

Есть вопрос, имеем функцию рекурсивного поиска файлов в папке, на выходе получаем ссылки на сами файлы, бился целый день, не могу понять, как можно на выходе получить сначало массив найденных файлов, пробовал черех explode, получил кучу массивов с одни значением в каждом.

<?
function search($target$directory$dontSearch){
    if(
is_dir($directory)){
            
$direc opendir($directory);
                while(
false !== ($file readdir($direc))) {
                    if(!
in_array($file$dontSearch)) {
                        if(
is_file($directory."/".$file)) {                                        
                            if(
preg_match("/$target/i"$file)) {
                                echo 
"<a  href=\"$directory/$file\">$file</a><br/>\n";
                                }
                        }
    else if(
is_dir($directory."/".$file)){
        
search($target,$directory."/".$file$dontSearch);
        }
    }
}
closedir($direc);
    }
return;
}
?>

$dontSearch - переменная в которой находится список игнорируемых имён файлов и папок.

   
 
 автор: cheops   (29.04.2007 в 14:32)   письмо автору
 
   для: Nemesis   (29.04.2007 в 00:01)
 

Объявите массив глобальным - тогда он будет доступен на каждой итерации, а также после окончания работы функции
<? 
function search($target$directory$dontSearch){ 

    global 
$arr;

    if(
is_dir($directory)){ 
            
$direc opendir($directory); 
                while(
false !== ($file readdir($direc))) { 
                    if(!
in_array($file$dontSearch)) { 
                        if(
is_file($directory."/".$file)) {                                         
                            if(
preg_match("/$target/i"$file)) { 

                                
$arr[] = "<a  href=\"$directory/$file\">$file</a><br/>\n"

                                } 
                        } 
    else if(
is_dir($directory."/".$file)){ 
        
search($target,$directory."/".$file$dontSearch); 
        } 
    } 

closedir($direc); 
    } 
return; 

?>

   
 
 автор: Nemesis   (29.04.2007 в 15:54)   письмо автору
 
   для: cheops   (29.04.2007 в 14:32)
 

Спасибо. Но я наверное чего-то не пойму, если я пишу конструкцию вида:

<?
...
echo 
$arr[] = "<a  href=\"$directory/$file\">$file</a><br/>\n";
...
?>

то, получаю список найденных файлов, и если написать следом:

<?
...
print_r ($arr);
...
?>

то, получу колличество массивов равное количеству найденных файлов, причём в каждом из массивов будет на один найденный файл больше, тоесть в первом 1, в последнем все найденные. А вот как получить один такой массив с полным списком?

   
 
 автор: cheops   (29.04.2007 в 17:30)   письмо автору
 
   для: Nemesis   (29.04.2007 в 15:54)
 

print_r ($arr) выводите после вызова функции
<?php
  
// Вызов функции
  
search($target$directory$dontSearch);
  
// Работа с результирующим массивом $arr
  
echo "<pre>";
  
print_r($arr);
  echo 
"</pre>";
?>

   
 
 автор: Nemesis   (29.04.2007 в 17:45)   письмо автору
 
   для: cheops   (29.04.2007 в 17:30)
 

Спасибо, то, что надо.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования