Автор Тема: if ($a_row[type] == 2){?????}  (Прочитано 5608 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Ленивый гость

  • Гость
if ($a_row[type] == 2){?????}
« : 02 Октября 2002, 11:59:02 »
Вот такой скрипт делает ХТМЛ таблицу предприятий.
$db_name = "test";
$table_name = "company";

$connection = @mysql_connect("localhost", "admin", "gramozeka")
                           or die(\'Не могу подключиться к серверу баз данных\');
             @mysql_select_db($db_name, $connection)
                       or die(\'Не могу открыть базу данных\');

$sql = "select title, city, man, tel, type from $table_name order by title desc";
 
  $result = mysql_query($sql,$connection)
  or die("Couldn\'t execute query.");
 
@$num_rows = mysql_num_rows($reult);
while ($a_row = mysql_fetch_array ($result))
      {
      print "\\n";
      print "\\t$a_row[title]\\n";
      print "\\t$a_row[city]\\n";
      print "\\t$a_row[man]\\n";
      print "\\t$a_row[tel]\\n";
      print "\\t$a_row[type]\\n";
      print "\\t\\n";
      }
         ?>
         
Поле type - имеет формат int. Скрипт в результате работы возвращает в поле type циферки
У меня это от 1 до 6, что соответствует типу предприятия:

1 - автозаправка
2 - нефтяная база
3 - оптовая база
4 - представитель компании

ну и т.д.

Уж очень мне хочется, чтобы вместо циферок в таблице были типы предприятий.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
if ($a_row[type] == 2){?????}
« Ответ #1 : 02 Октября 2002, 12:46:40 »
Мда, тяжелый случай.
Советовать сделать еще одну таблицу я уж и не суюсь - гость-то ленивый.
про массивы что-нибудь почитать - та же фигня. Лень человеку основы программирования изучить.

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
if ($a_row[type] == 2){?????}
« Ответ #2 : 02 Октября 2002, 12:53:13 »
Ленивый гость
А ты на странице комментарии напиши. Тогда все поймут, что цифирьки означают.
AS IS...

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
if ($a_row[type] == 2){?????}
« Ответ #3 : 02 Октября 2002, 15:31:44 »
$types=array(
1 => "автозаправка",
2 => "нефтяная база",
3 => "оптовая база",
4 => "представитель компании"
);

$type=$a_row[type];
print "\\t".$types[$type]."\\n";

Оффлайн PilotV

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 59
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
if ($a_row[type] == 2){?????}
« Ответ #4 : 02 Октября 2002, 15:48:20 »
print "\\t{$TYPES_ARRAY[$a_row[type]]}\\n";
Я так думаю (c)

Оффлайн PilotV

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 59
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
if ($a_row[type] == 2){?????}
« Ответ #5 : 02 Октября 2002, 15:52:33 »
[OFF]Ну не люблю я точку юзать - без нее красивее[/OFF]
А что касается точки в echo/print, так уж лучше все же запятая
Я так думаю (c)

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
if ($a_row[type] == 2){?????}
« Ответ #6 : 02 Октября 2002, 16:53:56 »
Цитировать
Ну не люблю я точку юзать - без нее красивее

А юзать надо
http://php.spb.ru/php/speed.html
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн PilotV

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 59
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
if ($a_row[type] == 2){?????}
« Ответ #7 : 02 Октября 2002, 19:29:35 »
Alexandr

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

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

В-третьих, я данные той статьи не проверял сам :), а потому степень моего доверия к тем данным <100%. Поскольку интуитивно + основываясь на моих знаниях и представлениях о компиляции/интерпретации мне кажется, что не дожно быть это медленнее (конечно, в исходники ПХП я не полезу - не такой это важный вопрос). А если даже в статье даные верны, то 20% - для меня вполне допустимо.

В четвертых, не ставился эксперимент, а потому неизвестно, что будет с соотношением времени при большом числе переменных в строке и, соответственно, с большим количеством конкантенаций (точек). Я лично думаю, что ситуация повернется с точностью до наоборот. Предпосылки такие:
- Точка - это одна операция конкантенации строк. Для каждой такой операции нужно выделить буфер под результат и скопировать в него по очереди 1-ю и 2-ю строку.
- У ПХП есть некий "компилятор", который переводит исходный код в нечто более удобное и быстрое. Точка - это конструкция языка, переменная вне кавычек - тоже, и вся операция конкантенации, вероятно, транслируется в более быстрый байт-код.
- Для сторок же в двойных кавычках, по идее, на этапе выполнения (а не компиляции) запускается некий парсер, находящий в ней спецсимволы и переменные, и если переменная найдена, ее надо разобрать. Это, вероятно, медленнее, чем синтаксический разбор при компиляции.
В этом я, собственно, как не уверен, как не уверен и в том, что строки на этапе компиляции совсем-совсем не обрабатываются, но просто это возможное объяснение замедлению.
- Когда переменных больше 1, то для _каждой_ точки должна выполниться описанная выше процедура. Парсер же строки должен запуститься всего 1 раз.
- При малом количестве переменных точка может быть быстрее за счет оптимизации кода при компиляции. При большом же количестве переменных я очень подозреваю, как написал выше, что ситуация может повернуться наоборот, потому против выделения буфера под строку 1 раз + парсинг строки будет стоять много операций по выделению буфера и переливанию результатов.
В общем, реально как работает я ПХП не знаю, и все эти выкладки основаны на моих представлениях о том "как должно быть" и некоторых знаниях из теории трансляции, поэтому могут быть ошибочными. Но я считаю их довольно верояными.

В-пятых (одних из самых важных), в целом эти эксперименты и полученные данные - немного спекулятивные. Поскольку в нормальной более менее приличной программе все эти "ускоряемые" операции представляют относительно небольшой процент кода, и занимают относительно небольшой процент ОБЩЕГО времени выполнения. В итоге если такими мучениями по "оптимизации" мы получим ускорение оптимизированного кода даже на 30-40%, то общее ускорение составит, дай-то бог, процентов 10. Мне кажется, что для таких программ адекватнее будет свои силы посвятить оптимизации алгоритмов. Если же (что обычно и бывает) в программе активно идет работа с БД, то там вообще основное время будет занимать именно выполнение запросов СУБД, и с ними вообще эроценты повышения производительности будут незаметны.
Что же касается обычных среднестатистических скриптов, или же таких, в которых 2 килобайта кода "посвящены" принтам и эхам, то в 99.99% случаев оптимальность и быстродействие - некритичные для них величины :).
И если взять это все на фоне:

В-шестых, читабельность, понятность, красота кода, удобство работы с ним и модификации лично для меня - весьма важный критерий, намного поважнее проблемы будет ли моя программа выполняться 0.5 секунды или 0.52 секунды.

Основываясь на написанном, плевал я на оптимизацию методом выноса переменных (любого вида) из кавычек, а также на разные прочие оптимизации из той серии. Я предпочитаю писать красивый и удобный код.
Хостеры же такие "перегрузки" с моей стороны, думаю, как-нибудь выдержат...
Я так думаю (c)

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
if ($a_row[type] == 2){?????}
« Ответ #8 : 03 Октября 2002, 09:45:34 »
Цитировать
Я - так - думаю

А я иначе. :-)
[OFF]Нифига себе поэму написал :-)[/OFF]
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн rembo

  • Больной
  • Постоялец
  • ***
  • Сообщений: 219
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.v4.ru
if ($a_row[type] == 2){?????}
« Ответ #9 : 03 Октября 2002, 11:12:22 »
Даа если все "по полочкам" разложить из этого целая статьяб вышла :).
А вообще я в какой-то мере поддерживаю PilotV. Зачастую любую программу нужно оптимизировать не выносом из кавычек переменны, а пересмотром общей логики и ключевых алгоритмов реализации. Хотя конечно очевидные приемущества того или иного метода реализации того или иного кусочка кода игнорировать ради удобства не серьезно.
программист должен все сделать так, чтоб потом ничего не делать

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
if ($a_row[type] == 2){?????}
« Ответ #10 : 03 Октября 2002, 11:56:37 »
Цитировать
пересмотром общей логики и ключевых алгоритмов реализации

Я тож за это!
Но кое где можно жертвовать удобством ради хоть какого-то увеличения скорости, тем более если к этому привык.
И ещё...
Все доводы Пилота построены на: "я не ставил эксперимент, но" ("я думаю" || "мне кажется").
Вот если бы он реально протестил, то пользы было бы намного больше.
Неплохая бы статья получилась.
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн PilotV

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 59
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
if ($a_row[type] == 2){?????}
« Ответ #11 : 03 Октября 2002, 16:57:03 »
Цитировать
Хотя конечно очевидные приемущества того или иного метода реализации того или иного кусочка кода игнорировать ради удобства не серьезно.

Я всегда за _принципиальную_ оптимизацию - алгоритмическую. Жертвовать же такой специфичной для данной версии компилятора оптимизацией ради нормального кода - вполне серьезно (особенно на фоне "в-пятых"). Все-таки у хостеров сейчас не 486-е стоят. Или очень хочется бороться за снижение загрузки оплачиваемого сервера с 30% до 29.95% и 5 милисекунд разницы в сгорости генерации страницы?
Цитировать
Все доводы Пилота построены на: "я не ставил эксперимент, но" ("я думаю" || "мне кажется").
Вот если бы он реально протестил, то пользы было бы намного больше

"Я думаю" и "мне кажется" касаются только непосредственно операции конкантенации по сравнению с переменной в кавычках (и при этом базируются не только на интуиции, а на логике). Остальные моменты - объективны (я так думаю :))
Эксперимент - как будет нечего делать, может и поставлю. Но как я написал, меня в общем-то этот вопрос реально мало чешет (на основании остальных соображений). Так что пусть эксперименты ставит тот, кого этот вопрос так беспокоит, как тебя ;)
Я так думаю (c)

Ленивый гость

  • Гость
if ($a_row[type] == 2){?????}
« Ответ #12 : 03 Октября 2002, 20:44:37 »
PilotV Ну просто супер ответ!
Честное члово, очень приятно.
Я писем-то таких длинных никогда не получал.

Огромное спасибо!!!! Тебе

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
if ($a_row[type] == 2){?????}
« Ответ #13 : 04 Октября 2002, 10:04:44 »
Цитировать
Остальные моменты - объективны (я так думаю)

СУПЕР!!!!

Цитировать
Так что пусть эксперименты ставит тот, кого этот вопрос так беспокоит, как тебя

Да меня это тоже не сильно-то волнует.
Пусть каждый делает так, как считает правильным.
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн Доктор

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 487
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
if ($a_row[type] == 2){?????}
« Ответ #14 : 05 Октября 2002, 00:13:08 »
[OFF]
Цитировать
Остальные моменты - объективны (я так думаю)

СУПЕР!!!!

Юмор это был, ИМХО.
[/OFF]

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28