Что рациональнее?

Krisha

pain in the neck
Что рациональнее?

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

Передо мной 3 варианта:

1. Создать массив и сравнивать мою переменную с элементами массива.
2. Создать этот список в базе и, соответственно, потом сравнивать мою переменную с содержимым базы.
3. Использовать SWICH "case"...

Подскажите +- этих вариантов, возможно есть еще варианты ?
Правда с учетом того, что сам список может иногда меняться, то есть может быть расширен, может быть наоборот.
 

tony2001

TeaM PHPClub
Re: Что рациональнее?

имхо массив и in_array() - лучше всего.
но начальных условий слишком мало, чтобы что-то определенно сказать.
 

Krisha

pain in the neck
Re: Re: Что рациональнее?

Автор оригинала: tony2001
имхо массив и in_array() - лучше всего.
но начальных условий слишком мало, чтобы что-то определенно сказать.
Я, в принципе и хотел делать через массив, просто меня тута напугали :

"работа с любым массивом очень ресурсоемкая, и относительно медленная, зачем использовать если можна обойтись?"

Вот я и напугался.... :)

Ты скажи, что еще уточнить нада, чтобы можно было определенее что-то сказать...
 

trent

Developer
Re: Re: Re: Что рациональнее?

Автор оригинала: Krisha
Передо мной 3 варианта:

1. Создать массив и сравнивать мою переменную с элементами массива.
2. Создать этот список в базе и, соответственно, потом сравнивать мою переменную с содержимым базы.
3. Использовать SWICH "case"...
Как я понимаю, что нужно что-то похожее на фильтр нежелательных слов из словаря?? Копай в сторону preg_*() там есть возможность работы с массивами (_grep() _match_all()). Меня тоже интересует perfomance в этой области, на данный момент применяю первый метод, но он хорош до поры до времени, если в массиве элементов станет на порядок больше, то и производительность сильно упадет...
 

tony2001

TeaM PHPClub
Re: Re: Re: Что рациональнее?

Автор оригинала: Krisha
Я, в принципе и хотел делать через массив, просто меня тута напугали :
"работа с любым массивом очень ресурсоемкая, и относительно медленная, зачем использовать если можна обойтись?"
Вот я и напугался.... :)
Ты скажи, что еще уточнить нада, чтобы можно было определенее что-то сказать...
по скоростям - у Димы на php.spb.ru есть тесты, очень занимательно, надо сказать.
хотя это общий случай - конкретные случаи надо тестить, если уж так все плохо.
уточнить?
да ты ж ничего не сказал, ни откуда все это идет, ни как часто меняться будет, ничего.
как тебе удобней, как будет лучше в твоем случае - Я НЕ ЗНАЮ.
выбирать тебе.

2 trent
там, где можно обойтись без регэкспов, следует обходится без них, т.к. регэкспы по сравнению со всем остальным - очень тормозные.
 

trent

Developer
Re: Re: Re: Re: Что рациональнее?

Автор оригинала: tony2001
2 trent
там, где можно обойтись без регэкспов, следует обходится без них, т.к. регэкспы по сравнению со всем остальным - очень тормозные.
Это я прекрасно понимаю, но в данном случае надо тестировать, т.к. первый способ очень уж ресурсоемок (IMHO) при больших массивах. А так мне понравился второй способ, но там нужна база...Что не всегда рационально.
 

RomikChef

Guest
База в РНР

Берем в се лучшее от всех методов.
Делаем ассоциативный массив, с ключами из этих самых слов.
проверка одной строчкой if (isset($massiv['ctroka']))
 

Krisha

pain in the neck
Re: Re: Re: Re: Re: Что рациональнее?

Автор оригинала: trent
Это я прекрасно понимаю, но в данном случае надо тестировать, т.к. первый способ очень уж ресурсоемок (IMHO) при больших массивах. А так мне понравился второй способ, но там нужна база...Что не всегда рационально.
В общем идею я уловил...
Дело в том, что мой вопрос был общим, и по-этому я не углублялся в свою конкретную задачу...

Я тута еще один вариант придумал: описать константы, а потом проверять есть у меня такая или нету, ну и дальше по смыслу....

А моя контретная задача, если интерессно, я всё пытаюсь замутить "красивую навигацию" о которой тут так много говорилось, но реальный готовый пример так никто и не показал, вот я и сижу сам придумываю варианты решения, уже 3 придумал ;)), но так как я еще с синтаксисом и особенностями php не очень хорошо знаком, приходится по ходу дела консультироваться... как доведу до ума все три(а может больше), буду их тестить...
 

RomikChef

Guest
Re: Re: Re: Re: Re: Re: Что рациональнее?

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

Krisha

pain in the neck
Re: Re: Re: Re: Re: Re: Re: Что рациональнее?

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

url:: http://www.site.com/language/chapter/subchapter/...

Вот, собстна, уже сделал 3 варианта....

А проблем вообще никаких нету, просто треннируюсь, а как по-твоему язык изучать, если не пробовать разные варианты, оценивать их, сравнивать ?

Меня в шею никто не гонит, вот и экспериментирую...
 

trent

Developer
Re: Re: Re: Re: Re: Re: Re: Что рациональнее?

Автор оригинала: RomikChef
очередной любитель преодолевать самому себе сделанные трудности.
Во-первых, навигация - это совсем другое.
во-вторых, она не красивая, а уродская
Нормальные люди наоборот всякие параметры из адреса убирают, а ты наоборот - побольше напихать.
у меня тогда встречный вопрос, как тут обстоят дела не с латинскими буковками?
 

trent

Developer
Re: База в РНР

Автор оригинала: RomikChef
Берем в се лучшее от всех методов.
Делаем ассоциативный массив, с ключами из этих самых слов.
проверка одной строчкой if (isset($massiv['ctroka']))
у меня тогда встречный вопрос, как тут обстоят дела не с латинскими буковками?

сорри, не то процетировал
 

Krisha

pain in the neck
Re: Re: База в РНР

Автор оригинала: trent
у меня тогда встречный вопрос, как тут обстоят дела не с латинскими буковками?
сорри, не то процетировал
Хм, где тут, простите ?
 

Krisha

pain in the neck
Re:

АА, поняв...
Чисто теоретически, если поставить поддержку русского языка для php, то думаю можно и русские буковки юзать, тока ИМХО это изврат будет ;)
 

RomikChef

Guest
Re: Re:

Krisha: прошу простить дурака - погорячился.
trent: мнге кажется, что любой символ
 

RomikChef

Guest
Re: Re: Re: Re:

поделись хоть, вариантами своими. Дай покритиковать ;-)
А то у меня тут идейки в голове бродят, но чисто теоретические.
 

Krisha

pain in the neck
Re: Re: Re: Re: Re:

Автор оригинала: RomikChef
поделись хоть, вариантами своими. Дай покритиковать ;-)
А то у меня тут идейки в голове бродят, но чисто теоретические.
Да, я знаю, что я извращенец, вот один из вариантов на обсуждение.
Сразу оговорюсь, что к синтаксису я еще не привых, так что пишу как думаю...

Чтобы было понятно, сразу скажу, что main.inc это файл, в котором я описываю все свои глобальные переменные и константы, приводить не буду, так как и так понятно, что там...

ну а в .htaccess пишу собстна :

DirectoryIndex index.php

ErrorDocument 404 /index.php
ErrorDocument 401 /index.php

<Files .htaccess>
Order allow,deny
Deny from all
</Files>
<Files ~ "\\.inc$">
Order allow,deny
Deny from all
</Files>

index.php код:

PHP:
<?include('main.inc');?>
<?
 $url=$REQUEST_URI;
 $arr = split ("/",$url);
 $lng = $arr[1];
 $chapter = $arr[2];
if ($chapter==""){
 switch ($lng) {
	case "de":
	 include(DIR_WS_INCLUDES . $lng . '/' . 'welcome.inc');
	 include(DIR_WS_INCLUDES . $lng . '/' . 'main.inc');
         include('constructor.phtml');
	 break;
	case "en":
	 include(DIR_WS_INCLUDES . $lng . '/' . 'welcome.inc');
	 include(DIR_WS_INCLUDES . $lng . '/' . 'main.inc');
         include('constructor.phtml');
	 break;
	case "":
	 $lng="de";
	 include(DIR_WS_INCLUDES . $lng . '/' . 'welcome.inc');
	 include(DIR_WS_INCLUDES . $lng . '/' . 'main.inc');
         include('constructor.phtml');
	 break;
	default:
         include ('error.php'); }
  } else {
 switch ($lng) {
	case "de":
        $include_file = CHAPTER_FILENAME_ . $chapter;
      if (!defined($include_file)) {
          include ('error.php');
       }else{
	 include(DIR_WS_INCLUDES . $lng . '/' . 'main.inc');
	 include(DIR_WS_INCLUDES . $lng . '/' . $chapter. '.inc');
         include('constructor.phtml');
       }
         break;
	case "en":
        $include_file = CHAPTER_FILENAME_ . $chapter;
      if (!defined($include_file)) {
          include ('error.php');
       }else{
	 include(DIR_WS_INCLUDES . $lng . '/' . 'main.inc');
	 include(DIR_WS_INCLUDES . $lng . '/' . $chapter. '.inc');
         include('constructor.phtml');
       }
         break;
	default:
         include ('error.php'); }}
?>
Ужас, правда ;)
 

RomikChef

Guest
Re: Re: Re: Re: Re: Re:

$file=$DOCUMENT_ROOT.$arr[1]."/".$arr[2].".inc";
if (file_exists($file)) include($file); else include('error.php');
и все.
 

Krisha

pain in the neck
Re: Re: Re: Re: Re: Re: Re:

Автор оригинала: RomikChef
$file=$DOCUMENT_ROOT.$arr[1]."/".$arr[2].".inc";
if (file_exists($file)) include($file); else include('error.php');
и все.
Хмм, прыкольно... НО!
Не работает у меня так... + кажись не учтены варианты:

http://localhost/
http://localhost/en/
http://localhost/de/

То есть, без разделов...

Да, еще, выходит ты инклудишь такой файл:

http://localhost/en/chapter.inc

Он у мени не хатит его инктулить...
 
Сверху