2013-04-08 2 views
0

Я новичок в программировании, и мне нужно учить себя. Но я не могу понять, что я делаю неправильно в этом проекте. Этот проект для себя, для создания ярлыков на PHP, поэтому мне не нужно программировать столько строк кода; когда я программирую, иногда я использую те же 20 строк для разных приложений.Мой скрипт работает слишком долго. Возможно ли, что у меня слишком много if-утверждений вложенных?

Вот мой сценарий:

function writeDir($directory = null, $link = null, $exception = null) { 
    if (!isset($directory)) { 
     $directory = './'; 
    } 
    if (!isset($link)) { 
     $link = false; 
    } 
    if (!isset($exception)) { 
     $exception = null; 
    } 
    // now... 
    if ($link==true&&$exception!=null) { // do a link and exception(s) 
     $directoryList = scandir($directory); // get an array of all directory items 
     $directoryLength = count($directoryList); // count $directoryList array length 
     if (is_string($exception)) { // if one (1) exception 
      for ($i=2; $i<$directoryLength; $i++) { // cycle through all directory items 
       if ($directoryList[$i] == $exception) { // if we hit that one (1) exception 
        echo ''; // do nothing 
       } else { 
        echo '<a href="' . $directoryList[$i] . '"> ' . $directoryList[$i] . ' </a><br />' . "\n"; 
       } 
      } 
     } 
     if (is_array($exception)) { // if multiple exceptions 
      $exceptionList = count($exception); // count $exception array length 
      for ($i=2; $i<$directoryList; $i++) { // cycle through all directory items 
       for ($j=0; $j<$exceptionList; $j++) { // cycle through all exceptions 
        if ($directoryList[$i] == $exceptionList[$j]) { // if we hit one of the multiple exceptions 
         echo ''; // do nothing 
        } else { 
         echo '<a href="' . $directoryList[$i] . '"> ' . $directoryList[$i] . ' </a><br />' . "\n"; 
        } 
       } 
      } 
     } 
    } 
    if ($link==true&&$exception==null) { 
     $directoryList = scandir($directory); 
     $directoryLength = count($directoryList); 
     for ($i=2; $i<$directoryLength; $i++) { 
      echo '<a href="' . $directoryList[$i] . '"> ' . $directoryList[$i] . ' </a><br />' . "\n"; 
     } 
    } 
    if ($link==false&&$exception!=null) { // do only exception(s) without links 
     $directoryList = scandir($directory); // get an array of all directory items 
     $directoryLength = count($directoryList); // count $directoryList array length 
     if (is_string($exception)) { // if one (1) exception 
      for ($i=2; $i<$directoryLength; $i++) { // cycle through all directory items 
       if ($directoryList[$i] == $exception) { // if we hit that one (1) exception 
        echo ''; // do nothing 
       } else { 
        echo $directoryList[$i] . '<br />' . "\n"; 
       } 
      } 
     } 
     if (is_array($exception)) { // if multiple exceptions 
      $exceptionList = count($exception); // count $exception array length 
      for ($i=2; $i<$directoryList; $i++) { 
       for ($j=0; $j<$exceptionList; $j++) { 
        if ($directoryList[$i] == $exceptionList[$j]) { 
         echo ''; 
        } else { 
         echo $directoryList[$i] . '<br />' . "\n"; 
        } 
       } 
      } 
     } 
    } 
    if ($link==false&&$exception==null) { 
     $directoryList = scandir($directory); 
     $directoryLength = count($directoryList); 
     for ($i=2; $i<$directoryLength; $i++) { 
      echo $directoryList[$i] . '<br />' . "\n"; 
     } 
    } 
} 

Я знаю, это выглядит как много. Но я пытаюсь сделать свою жизнь проще при программировании.

В принципе, синтаксис для этого при вызове в PHP файле:

writeDir(); // at the very least: ИЛИ: writeDir('./', true, 'index.php');

Второй записывает файлы в текущем каталоге с соответствующими ссылками на них, но скачет над index.php.

Третий (третий) аргумент может представлять собой либо одинарную пропущенную страницу (как строку), либо массив из нескольких пропущенных страниц. Или, по крайней мере, это то, чего я пытаюсь достичь.

Конечно, включение этого исходного файла будет необходимо на всех страницах, на которых я их использую. Раньше, когда IT WAS работал, я мог только форматировать список элементов каталога, исключая один (1) файл. Итак, я попытался разрешить массив файлов. Теперь он загружается навсегда. Мне пришлось использовать функцию set_time_limit() для выхода из сценария.

Теперь, последнее. Когда я использовал функцию set_time_limit(), он отобразил мои элементы каталога, но по какой-то причине два (2) всего ... Что я сделал не так?

Есть ли слишком много if-утверждений или я что-то пропустил? Должен ли я начать все сначала?

Я запрограммировал (непрофессионально) около 5 лет, поэтому я не знаю, что именно я делаю. Любое руководство будет высоко оценено.

Надеюсь, что я дал достаточно информации и деталей.

JDot

P.S. Любой, кто хочет использовать этот скрипт, более чем приветствуется (если его даже стоит использовать).

+3

'для ($ I = 2; $ я <$ directoryList; $ я ++) {' - это выглядит не так, потому что '$ directoryList' является массивом. –

+1

Вы знаете, что Apache делает это за вас? –

+0

Хорошо, что вы знаете о повторном использовании кода и узнаете тонкости языка. Я бы рекомендовал, чтобы вы рассматривали классы и объекты, что является очень хорошим способом повторного использования кода. –

ответ

0

использования есло если

if($a==1) 
{ 
echo $a; 
} 
elseif($b==1) 
{ 
echo $b; 
} 
else 
{ 
echo "c"; 
} 

и есть тройной оператор Ф.О. одного, если другое заявление: узнать его

Смежные вопросы