Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помощь от Гуру в php

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Нужна помощь по оптимизации скрипта
spark108
Отправлено: 19 Августа, 2015 - 05:29:11
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




Есть такой скрипт:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. include '../../mp-include/function.php';
  3.  
  4. $style = glob('*/page.php');
  5. $i = 0;
  6. $a = count($style);
  7. $c1 = ''; $c2 = ''; $c3 = ''; $c4 = '';
  8. while($a != 0) {
  9.         if ($i != $a) {
  10.                 include $style[$i];
  11.                 $d = $a - 1;
  12.                 if ($d == $i) {$c1 .= $name; $c2 .= $version; $c3 .= $author; $c4 .= $info;} else {$c1 .= $name.'-'; $c2 .= $version.'-'; $c3 .= $author.'-'; $c4 .= $info.'-';};
  13.                 $i++;
  14.         } else break;
  15. };
  16.  
  17. $i = 0;
  18. if ($a != 0) {
  19.         echo '<table border="1" width="100%">';
  20.         echo '<tr>';
  21.         echo '<th>Название стиля</th>';
  22.         echo '<th>Версия стился</th>';
  23.         echo '<th>Автор стиля</th>';
  24.         echo '<th>Описание</th>';
  25.         echo '<th>Действия</th>';
  26.         echo '</tr>';
  27.         $a = count($style);
  28.         while ($a != 0) {
  29.                 if ($i < $a) {
  30.                 echo '<tr>';
  31.                 $nn = explode('-', $c1);
  32.             echo '<th>'.$nn[$i].'</th>';
  33.                 $n = explode('-', $c2);
  34.             echo '<th>'.$n[$i].'</th>';
  35.                 $n = explode('-', $c3);
  36.             echo '<th>'.$n[$i].'</th>';
  37.                 $n = explode('-', $c4);
  38.             echo '<th>'.$n[$i].'</th>';
  39.                 if ($nn[$i] == setting(style)) {echo '<th>Установлен</th>';} else {echo '<th><a href="?select='.$nn[$i].'">Применить</a></th>';};
  40.         echo '</tr>';
  41.                 $i++;
  42.             } else break;
  43.         };
  44.         echo '</table>';
  45. };

тор
Выглядит он ужастно, а все из за того что некоторое действия повторяются или же вообще делают лишнее. Дак вот я хочу попросить вас, гуру о том чтобы вы помогли мне оптемезировать скрипт. А точнее сделать его по другому, или уменьшить этот, или вообще чтонибуть другое что могло быть лутше этого.

Цель скрипта: В определенной папке к примеру папка style лежать 1,2,3 и более папок (Естественно эти папки, это шаблоны для сайта). В каждой папке есть фай page.php в котором хранятся данные о шаблоне. В моем скрипте функция glob('*/page.php'); выводит пути в переменную. Далее идет импорт всех файлов page.php с уникальным масив номером.
PHP:
скопировать код в буфер обмена
  1. $i = 0;
  2. $a = count($style);
  3. $c1 = ''; $c2 = ''; $c3 = ''; $c4 = '';
  4. while($a != 0) {
  5.         if ($i != $a) {
  6.                 include $style[$i];
  7.                 $d = $a - 1;
  8.                 if ($d == $i) {$c1 .= $name; $c2 .= $version; $c3 .= $author; $c4 .= $info;} else {$c1 .= $name.'-'; $c2 .= $version.'-'; $c3 .= $author.'-'; $c4 .= $info.'-';};
  9.                 $i++;
  10.         } else break;
  11. };


Далее идет вывод всех page.php в таблицу:
PHP:
скопировать код в буфер обмена
  1. $i = 0;
  2. if ($a != 0) {
  3.         echo '<table border="1" width="100%">';
  4.         echo '<tr>';
  5.         echo '<th>Название стиля</th>';
  6.         echo '<th>Версия стился</th>';
  7.         echo '<th>Автор стиля</th>';
  8.         echo '<th>Описание</th>';
  9.         echo '<th>Действия</th>';
  10.         echo '</tr>';
  11.         $a = count($style);
  12.         while ($a != 0) {
  13.                 if ($i < $a) {
  14.                 echo '<tr>';
  15.                 $nn = explode('-', $c1);
  16.             echo '<th>'.$nn[$i].'</th>';
  17.                 $n = explode('-', $c2);
  18.             echo '<th>'.$n[$i].'</th>';
  19.                 $n = explode('-', $c3);
  20.             echo '<th>'.$n[$i].'</th>';
  21.                 $n = explode('-', $c4);
  22.             echo '<th>'.$n[$i].'</th>';
  23.                 if ($nn[$i] == setting(style)) {echo '<th>Установлен</th>';} else {echo '<th><a href="?select='.$nn[$i].'">Применить</a></th>';};
  24.         echo '</tr>';
  25.                 $i++;
  26.             } else break;
  27.         };
  28.         echo '</table>';
  29. };
.

В полученой таблице 1 столбик это имя шаблона, второй это версия, 3 это автор, 4 это описание.

Файл page.php выглядит так:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. $name = 'default';
  4. $version = '1.0';
  5. $author = 'MegaPress';
  6. $info = 'Дефольный шаблон MegaPress';


В этом месте:
PHP:
скопировать код в буфер обмена
  1. if ($nn[$i] == setting(style)) {echo '<th>Установлен</th>';} else {echo '<th><a href="?select='.$nn[$i].'">Применить</a></th>';};

Идет проверка на установлен ли шаблон или нет. В БД содержится таблица с настройками в которой содержится строка с именем style и значением default, Функцией setting() я получаю это значение и после сравниваю его с названием шаблона. Если название и значение совпали, то вывожу слово "Установлен" если же нет, то вывожу ссылку на замену шаблона.

Прошу помочь с оптимезацией.
(Добавление)
ОЙ, помоему не в тот раздел брасол, да ладно.
(Добавление)
P.S как бы еще сделать чтобы шаблон этой страницы был отделен, то есть таблица постраивалась не в это файле.
(Добавление)
Оптемезировал до вот такого вида:
PHP:
скопировать код в буфер обмена
  1. include '../../mp-include/function.php';
  2.  
  3. $style = glob('*/page.php');
  4. $i = 0;
  5. $a = count($style);
  6. $c1 = ''; $c2 = ''; $c3 = ''; $c4 = '';
  7. echo '<table border="1" width="100%"><tr><th>Название стиля</th><th>Версия стился</th><th>Автор стиля</th><th>Описание</th><th>Действия</th></tr>';
  8. while($a != 0) {
  9.         if ($i != $a) {
  10.                 include $style[$i];
  11.                 $d = $a - 1;
  12.                 if ($d == $i) {$c1 .= $name; $c2 .= $version; $c3 .= $author; $c4 .= $info;} else {$c1 .= $name.'-'; $c2 .= $version.'-'; $c3 .= $author.'-'; $c4 .= $info.'-';};
  13.                 if ($i < $a) {
  14.                 echo '<tr>';
  15.                 $nn = explode('-', $c1);
  16.             echo '<th>'.$nn[$i].'</th>';
  17.                 $n = explode('-', $c2);
  18.             echo '<th>'.$n[$i].'</th>';
  19.                 $n = explode('-', $c3);
  20.             echo '<th>'.$n[$i].'</th>';
  21.                 $n = explode('-', $c4);
  22.             echo '<th>'.$n[$i].'</th>';
  23.                 if ($nn[$i] == setting(style)) {echo '<th>Установлен</th>';} else {echo '<th><a href="?select='.$nn[$i].'">Применить</a></th>';};
  24.         echo '</tr>';
  25. };
  26.                 $i++;
  27.         } else break;
  28. };
  29. echo '</table>';

(Отредактировано автором: 19 Августа, 2015 - 06:03:24)

 
 Top
spark108
Отправлено: 19 Августа, 2015 - 12:35:54
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




Ну что не кто не хочет помочь?
 
 Top
DelphinPRO
Отправлено: 19 Августа, 2015 - 13:45:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Зачем вы собираете данные из массива в строку, а потом опять распаковываете? Улыбка
Для обхода массивов есть foreach. Незачем мудрить с другими циклами.

PHP:
скопировать код в буфер обмена
  1. $style = glob('*/page.php');
  2. echo '
  3.         <table border="1" width="100%">
  4.         <tr>
  5.                 <th>Название стиля</th>
  6.                 <th>Версия стился</th>
  7.                 <th>Автор стиля</th>
  8.                 <th>Описание</th>
  9.                 <th>Действия</th>
  10.         </tr>';
  11.        
  12. foreach ($styles as $style) {
  13.         include $style;
  14.         echo '<tr>';
  15.         echo '<th>'.$name.'</th>';
  16.         echo '<th>'.$version.'</th>';
  17.         echo '<th>'.$author.'</th>';
  18.         echo '<th>'.$info.'</th>';
  19.         if ($name == setting(style)) {
  20.                 echo '<th>Установлен</th>';
  21.         } else {
  22.                 echo '<th><a href="?select='.$name.'">Применить</a></th>';
  23.         }
  24.         echo '</tr>';
  25. }
  26. echo '</table>';



И если есть возможность, данные лучше хранить в массиве. page.php:
PHP:
скопировать код в буфер обмена
  1. return array(
  2.         'name'    => 'default';
  3.         'version' => '1.0';
  4.         'author'  => 'MegaPress';
  5.         'info'    => 'Дефольный шаблон MegaPress';
  6. );


Получать их так:
PHP:
скопировать код в буфер обмена
  1.         $data = include $style;
  2.         echo '<tr>';
  3.         echo '<th>'.$data['name'].'</th>';
  4.         echo '<th>'.$data['version'].'</th>';
  5.         ...
  6.  

(Отредактировано автором: 19 Августа, 2015 - 13:48:05)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
spark108
Отправлено: 20 Августа, 2015 - 06:29:58
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




Воу, спасибо. Я просто в php учусь еще и стараюсь использовать все что знаю. Но я заметил что некоторые скрипты получаются очень большие в частности этот. Вот и обратился к гуру.
(Добавление)
Я у вас в этом месте слегка подправил код:
у вас
из за того что переменной $styles воообще не существует, то при выполнение выдовалась ошибка. Сделал так: и все нормально.
 
 Top
Sail
Отправлено: 20 Августа, 2015 - 09:39:18
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




spark108 пишет:
и все нормально.

Не всё.
Надо было 1-ю строчку того кода править, а не в цикле одинаковые переменные делать.
 
 Top
spark108
Отправлено: 20 Августа, 2015 - 12:27:07
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




Sail пишет:
Не всё.
Надо было 1-ю строчку того кода править, а не в цикле одинаковые переменные делать.
Дак и с одинаковыми переменными все нормально работает. Или типо надо сделать так:
PHP:
скопировать код в буфер обмена
  1. $styles = glob('*/page.php');
  2. echo '
  3.        <table border="1" width="100%">
  4.        <tr>
  5.                <th>Название стиля</th>
  6.                <th>Версия стился</th>
  7.                <th>Автор стиля</th>
  8.                <th>Описание</th>
  9.                <th>Действия</th>
  10.        </tr>';
  11.        
  12. foreach ($styles as $style) {
  13.         include $style;
  14.         echo '<tr>';
  15.         echo '<th>'.$name.'</th>';
  16.         echo '<th>'.$version.'</th>';
  17.         echo '<th>'.$author.'</th>';
  18.         echo '<th>'.$info.'</th>';
  19.         if ($name == setting(style)) {
  20.                 echo '<th>Установлен</th>';
  21.         } else {
  22.                 echo '<th><a href="?select='.$name.'">Применить</a></th>';
  23.         }
  24.         echo '</tr>';
  25. }
  26. echo '</table>';

(Отредактировано автором: 20 Августа, 2015 - 12:29:34)

 
 Top
DelphinPRO
Отправлено: 20 Августа, 2015 - 13:52:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




spark108 пишет:
Или типо надо сделать так:
$styles = glob('*/page.php');

ну конечно. одинаковые переменные нехорошо.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
spark108
Отправлено: 20 Августа, 2015 - 14:13:53
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




DelphinPRO пишет:
ну конечно. одинаковые переменные нехорошо.

Вспомнил это, но уже не помню где видел:

и тд..
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB