Перейти к содержимому

Фотография

Вопросы по PHP


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 188

#1
FreeX

FreeX
  • Завсегдатай
  • 116 сообщений
Есть код:

<select id="lang_p" name="lang_p">
<?php
$load = "";
$loadlist = "";
if ($handle = opendir('./system/lang')) {
   while (false !== ($file = readdir($handle))) {
		if ($file != "." && $file != ".." && (substr($file,0,1) != ".")) {
			 $load = $load . $file . ",";
		}
   }
   closedir($handle);
}
$load = explode(",", $load);
for ($loadcount=0; $loadcount < (count($load) - 1); $loadcount++)
{
if ($lang == $load[$loadcount])
{
$loadlist = $loadlist . "<option value=\"$load[$loadcount]\" selected=\"selected\">$load[$loadcount]</option>";
}
else
{
$loadlist = $loadlist . "<option value=\"$load[$loadcount]\">$load[$loadcount]</option>";
}
}
echo $loadlist;
?>
</select>

Он вытаскивает название всех вайлов и папок.
Вопрос-
В папке lang есть файлы, типа lang.inc.php
Как можно сделать так, чтобы в списке выводилось не lang.inc.php, а просто lang?
Тоесть чтобы скрипт убирал окончание, в данном случае .inc.php?
  • 0

#2
kornel

kornel
  • В доску свой
  • 9 069 сообщений
http://www.php.net/str_replace
  • 0

#3
T. Anre

T. Anre

    Data Miner

  • В доску свой
  • 2 327 сообщений
регулярные выражения.
  • 0

#4
kornel

kornel
  • В доску свой
  • 9 069 сообщений
T.Anre, ИМХО регекспы лучше не использовать, если можно обойтись обычными строковыми функциями. Регулярные выражения требуют на порядок больше ресурсов. Кстати это даже в родных доках по пхп сказано.
  • 0

#5
T. Anre

T. Anre

    Data Miner

  • В доску свой
  • 2 327 сообщений

T.Anre, ИМХО регекспы лучше не использовать, если можно обойтись обычными строковыми функциями. Регулярные выражения требуют на порядок больше ресурсов. Кстати это даже в родных доках по пхп сказано.

Согласен :D
  • 0

#6
San_k

San_k
  • В доску свой
  • 1 509 сообщений
кстати, по-моему, есть одноименная тема
  • 0

#7
Nik8.

Nik8.
  • Завсегдатай
  • 112 сообщений

<select id="lang_p" name="lang_p">

<?php

if ($handle = opendir('./system/lang')) 

{

 while (false !== ($file = readdir($handle)))

 {

  if ($file != ".." && (substr($file,0,1) != "."))

  {

   $short = substr($file, 0, strlen($file) - 8);# - В этой переменной будет урезаное имя

   echo "<option value=\"$file\"".(($file == $lang) ? " SELECTED" : '').">$short</option>";

  }

 }

 closedir($handle);

}

?>

</select>


  • 0

#8
Quessir

Quessir
  • Частый гость
  • 64 сообщений

<select id="lang_p" name="lang_p">
<?php
if ($handle = opendir('./system/lang')) 
{
 while (false !== ($file = readdir($handle)))
 {
  if ($file != ".." && (substr($file,0,1) != "."))
  {
   $short = substr($file, 0, strlen($file) - 8);# - В этой переменной будет урезаное имя
   echo "<option value=\"$file\"".(($file == $lang) ? " SELECTED" : '').">$short</option>";
  }
 }
 closedir($handle);
}
?>
</select>


А если файл называется не lang.inc.php, а lang.php то че же выходит? Автор не говорил что такой формат на всех файлах.
  • 0

#9
T. Anre

T. Anre

    Data Miner

  • В доску свой
  • 2 327 сообщений

А если файл называется не lang.inc.php, а lang.php то че же выходит? Автор не говорил что такой формат на всех файлах.

Тогда можно сделать так:
<?php
// Имя файла
$aFilename = array (
	'lang1.inc.php',
	'lang2.php'
);

// Что искать
$aSearch	= array (
	'.inc.php',
	'.php'
);

// Чем изменять
$aReplace  = array (
	'',
	''
);

/**
 * str_replace - замещает все вхождения строки поиска строкой замещения.
 * mixed str_replace (mixed search, mixed replace, mixed subject)
 */ 
$aResultFilename = str_replace($aSearch, $aReplace, $aFilename);

/**
 * Debug: $aResultFilename
 *
 * Array
 * (
 *	[0] => lang1
 *	[1] => lang2
 * )
 */
?>

Сообщение отредактировал T. Anre: 25.02.2007, 03:13:04

  • 0

#10
Nik8.

Nik8.
  • Завсегдатай
  • 112 сообщений
Ну судя по названию папки, можно предположить что файлы все там должны быть в стандартном виде.

Все же немного изменим алгоритм:

<select id="lang_p" name="lang_p">
<?php
if ($handle = opendir('./system/lang'))
{
while (false !== ($file = readdir($handle)))
{
 if (substr($file, -7, 8) != 'inc.php') continue;
 echo "<option value=\"$file\"".(($file == $lang) ? " SELECTED" : '').">$short</option>";
}
closedir($handle);
}
?>
</select>

  • 0

#11
Quessir

Quessir
  • Частый гость
  • 64 сообщений

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

Все же немного изменим алгоритм:

<select id="lang_p" name="lang_p">
<?php
if ($handle = opendir('./system/lang'))
{
while (false !== ($file = readdir($handle)))
{
 if (substr($file, -7, 8) != 'inc.php') continue;
 echo "<option value=\"$file\"".(($file == $lang) ? " SELECTED" : '').">$short</option>";
}
closedir($handle);
}
?>
</select>


Подожди. А разве он (стр_реплэйс) ищет максимальное вхождение? Если нет то он просто отрежет от ланг.инк.пхп подстроку .пхп.
  • 0

#12
Nik8.

Nik8.
  • Завсегдатай
  • 112 сообщений
Какой еще str_replace?

В упор не вижу, str_replace ни к чему абсолютно, глупо.

забыл добавить

$short = substr($file, 0, strlen($file) - 8);

в код
  • 0

#13
Quessir

Quessir
  • Частый гость
  • 64 сообщений
Sorry Nik8. Я T. Anre цитировал.
  • 0

#14
T. Anre

T. Anre

    Data Miner

  • В доску свой
  • 2 327 сообщений

Подожди. А разве он (стр_реплэйс) ищет максимальное вхождение? Если нет то он просто отрежет от ланг.инк.пхп подстроку .пхп.


Sorry Nik8. Я T. Anre цитировал.


Причем тут максимальное вхождение строки? В функцию передаются массивы.

Как работает str_replace
  • 0

#15
Nik8.

Nik8.
  • Завсегдатай
  • 112 сообщений
>T. Anre


Во первых не массивы а mixed значение, и как работает str_replace лучше смотреть на первоисточнике http://php.net/str_replace

Во вторых можешь сказать где в данной ситуации будет эффективность от str_replace?

Если я верно понял, то FreeX нужно что то вроде того что тут на форуме снизу слева, выбор языка, а это значит что str_replace будет выполняться практически на каждой странице сайта, substr быстрей str_replace, на 1 запросе не загруженном сервере эту разницу видно не будет, но это даст о себе знать когда на сайт попрут сотни пользователей, знаю что немного, однако если использовать метод "из пушки по воробьям", всякие str_replace, preg_replace и тп там где оно не требуется, снизят лимит клиентов которые сервер сможет обслуживать одновременно.

Просто советую проектировать скрипт не по принципу "работает и ладно" а стараться максимально снизить потребление процессорного времени, ресурсы сервера имеют предел и он часто близко к пределу.

Сообщение отредактировал Nik8.: 02.03.2007, 22:27:57

  • 0

#16
Quessir

Quessir
  • Частый гость
  • 64 сообщений

Причем тут максимальное вхождение строки? В функцию передаются массивы.


Я имел ввиду, допустим у тебя есть lang.inc.php и есть mixed search = .php, либо inc.php. Что он отрежет???
Оставит lang.inc или просто lang. Так что макс. вхождение еще как при том!
  • 0

#17
T. Anre

T. Anre

    Data Miner

  • В доску свой
  • 2 327 сообщений

Во первых не массивы а mixed значение...

Да? Разве?
См. выше приведенный мной пример, там я передаю массивы.

p.s. Функции могут принимать mixed-значения/ссылки, но переменные в PHP не могут быть mixed, почему так?

Во вторых можешь сказать где в данной ситуации будет эффективность от str_replace?

Посмотри на приведенный мною код, там все видно.

Как думаешь, какой из вариантов будет быстрее по времени, а какой дешевле по ресурсам:
- Однократный вызов str_replace с массивом параметров.
- Множественный вызов substr.

p.s. Чем-то напоминает спор о файлах и СУБД

Просто советую проектировать скрипт не по принципу "работает и ладно" а стараться максимально снизить потребление процессорного времени, ресурсы сервера имеют предел и он часто близко к пределу.

Программы проектируют в зависимости от задачи.
  • 0

#18
Quessir

Quessir
  • Частый гость
  • 64 сообщений

>T. Anre

Во первых не массивы а mixed значение, и как работает str_replace лучше смотреть на первоисточнике http://php.net/str_replace


Нашел к чему придраться! С технической стороны не вижу разницы.

Во вторых можешь сказать где в данной ситуации будет эффективность от str_replace?

Если я верно понял, то FreeX нужно что то вроде того что тут на форуме снизу слева, выбор языка, а это значит что str_replace будет выполняться практически на каждой странице сайта, substr быстрей str_replace, на 1 запросе не загруженном сервере эту разницу видно не будет, но это даст о себе знать когда на сайт попрут сотни пользователей, знаю что немного, однако если использовать метод "из пушки по воробьям", всякие str_replace, preg_replace и тп там где оно не требуется, снизят лимит клиентов которые сервер сможет обслуживать одновременно.


+1
  • 0

#19
T. Anre

T. Anre

    Data Miner

  • В доску свой
  • 2 327 сообщений

Я имел ввиду, допустим у тебя есть lang.inc.php и есть mixed search = .php, либо inc.php. Что он отрежет???
Оставит lang.inc или просто lang. Так что макс. вхождение еще как при том!

Есть входной массив, значит чтобы сделать замену, надо пробежаться по массиву, соответственно, заменятся сначала первые элементы, а потом уже конечные.
  • 0

#20
T. Anre

T. Anre

    Data Miner

  • В доску свой
  • 2 327 сообщений



Во вторых можешь сказать где в данной ситуации будет эффективность от str_replace?

Если я верно понял, то FreeX нужно что то вроде того что тут на форуме снизу слева, выбор языка, а это значит что str_replace будет выполняться практически на каждой странице сайта, substr быстрей str_replace, на 1 запросе не загруженном сервере эту разницу видно не будет, но это даст о себе знать когда на сайт попрут сотни пользователей, знаю что немного, однако если использовать метод "из пушки по воробьям", всякие str_replace, preg_replace и тп там где оно не требуется, снизят лимит клиентов которые сервер сможет обслуживать одновременно.


+1

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

Сообщение отредактировал T. Anre: 03.03.2007, 03:00:18

  • 0


Количество пользователей, читающих эту тему: 1

пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.