Как избежать выноса?

vir2L

Guest
Как избежать выноса?

PHP:
<?
   function archive ($path)
   {
      function reverse ($string)
      {
         $string=explode ("-", $string);
         $string=array_reverse ($string);
         $string=implode ("-", $string);
         return $string;
      }

      $dir=@opendir ($path);
      if ($dir)
      {
         while (($file=readdir ($dir))!==false)
         {
            if ($file!="." && $file!="..")
            {
               if (!is_dir ($file)) $dirs[]=$file;
               if (!is_file ($file) && ereg ("([0-9]{2})-([0-9]{2})-([0-9]{2})", $file)) $files[]=$file;
            }
         }
      }
      @sort ($dirs);
      if (count ($files)!=0)
      {
         for ($i=0; count ($files)>$i; $i++) $files[$i]=reverse ($files[$i]);
         rsort ($files);
         for ($i=0; count ($files)>$i; $i++) $files[$i]=reverse ($files[$i]);
      }
      @closedir ($dir);
      return array ($dirs, $files);
   }

   $path="txt";
   list ($dirs, $files)=archive ($path);
   for ($i=0; count ($dirs)>$i; $i++)
   {
      echo $dirs[$i]."<br><br>";
      list ($sub_dirs, $sub_files)=archive ($path."/".$dirs[$i]);
      for ($j=0; count ($sub_files)>$j; $j++) echo $sub_files[$j]."<br>";
   }
?>
При запуске выдает: Fatal error: Cannot redeclare reverse() (previously declared in D:\htdocs\netwarez\archive.php:4) in D:\htdocs\netwarez\archive.php on line 4.

Если function reverse вынести за пределы function archive, то все работает.

Но как избежать выноса?
 

Flying

Guest
никак - PHP не позволяет определять функции внутри функций
 

makRo

Guest
определи отдельно вторую функцию и вызови внутри первой
 

vir2L

Guest
Автор оригинала: Flying
никак - PHP не позволяет определять функции внутри функций
Позволь, не согласится.
Пример. И он прекрасно работает.

PHP:
<?
   function image ($path)
   {
      $array=@getimagesize ($path);
      if (!empty ($array[3]))
      {
         return "<img src=\"".$path."\" ".$array[3]." border=\"0\">";
      }
   }

   function data ($id)
   {
      function files ($id)
      {
         function reverse ($string)
         {
            $string=explode ("-", $string);
            $string=array_reverse ($string);
            $string=implode ("-", $string);
            return $string;
         }

         if (is_dir ("txt/".$id))
         {
            $path=opendir ("txt/".$id);
            while (($file=readdir ($path))!==false)
            {
               if ($file!="." && $file!="..")
               {
                  if (is_file ("txt/".$id."/".$file))
                  {
                     if (ereg ("([0-9]{2})-([0-9]{2})-([0-9]{2})", $file))
                     {
                        $array[]=$file;
                     }
                  }
               }
            }
            if (count ($array)!=0)
            {
               for ($i=0; count ($array)>$i; $i++) $array[$i]=reverse ($array[$i]);
               rsort ($array);
               for ($i=0; count ($array)>$i; $i++) $array[$i]=reverse ($array[$i]);
               return $array;
            }
         }
      }

      if ($array=files ($id))
      {
         if (count ($array)>=5) $count=5; else $count=count ($array);
         for ($i=0; $count>$i; $i++)
         {
            $date=$array[$i];
            $data="txt/".$id."/".$array[$i];
            include ("inc/data.php");
            if ($i<$count-1) include ("inc/table.php");
         }
      }
   }

   if ($id=="icq") include ("inc/template.php");
   elseif ($id=="media") include ("inc/template.php");
   elseif ($id=="games") include ("inc/template.php");
   elseif ($id=="soft") include ("inc/template.php");
   elseif ($id=="inetview") include ("inc/template.php");
   else
   {
      $id="news";
      include ("inc/template.php");
   }
?>
 
Сверху