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

Фото
- - - - -

Пару вопросов о PHP от новичка


  • Вы не можете создать новую тему
  • Please log in to reply
17 ответов в этой теме

#1 Epps

Epps

    20/05/2005

  • Постоялец
  • 830 сообщений
  • Откуда:C:/Estonia/Tallinn

Отправлено 23 июля 2005 - 13:17

1. Как выводить большие куски HTML кода через пхп, так чтобы не надо было ставить / перед каждым "
В перле есть конструкция

$text=<<TEXT;

<.>

TEXT

всё что внутри неё, принимается "как есть". как сделать такое в пхп?

2. Как лучше организовать выбор большого количества условий - через elseif или switch?
я делаю нечто вроде движка для сайта. там название страницы приходит вместе с URL. в зависиости от страницы нужно решить какой кусок хтмл кода выводить.
  • 0
Empty your mind, be formless. Shapeless, like water.
If you put water into a cup, it becomes the cup. You put water into a bottle and it becomes the bottle. You put it in a teapot it becomes the teapot. Now, water can flow or it can crash.
Be water my friend

#2 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 23 июля 2005 - 13:43

1) В PHP есть такая конструкция
2) switch удобней в твоём случае (если я правильно его понял)

Ну и всегда надо помнить о фильтрации приходящих от пользователя данных ;)
  • 0

#3 Epps

Epps

    20/05/2005

  • Постоялец
  • 830 сообщений
  • Откуда:C:/Estonia/Tallinn

Отправлено 23 июля 2005 - 16:02

switch($page)
{

case "index":
dispmain();
break;

case "misc":
dispmisc();
brake;
}

можно ли вставить в условие не конкретное значение, а вообще чиcло?
  • 0
Empty your mind, be formless. Shapeless, like water.
If you put water into a cup, it becomes the cup. You put water into a bottle and it becomes the bottle. You put it in a teapot it becomes the teapot. Now, water can flow or it can crash.
Be water my friend

#4 Epps

Epps

    20/05/2005

  • Постоялец
  • 830 сообщений
  • Откуда:C:/Estonia/Tallinn

Отправлено 23 июля 2005 - 16:34

не какое-то конкретное число)
а вообще например число состоящее из 4 цифр
как эту фразу описать? регулярными выражениями както?)
  • 0
Empty your mind, be formless. Shapeless, like water.
If you put water into a cup, it becomes the cup. You put water into a bottle and it becomes the bottle. You put it in a teapot it becomes the teapot. Now, water can flow or it can crash.
Be water my friend

#5 ParadoxL

ParadoxL
  • Постоялец
  • 5 023 сообщений
  • Откуда:Edinburg

Отправлено 25 июля 2005 - 09:02

Epps, делается это просто :

<?php
разная борода
if ($boroda) {
?>
sdjklfsjdklfsdf
<div>Zdesä pishesh prostoj HTML<img ...
</div>
<? } ELSE { ?>
здесь другой HTML ...

если я конечно правильно понял смысл твоей проблемы.
  • 0
Victoria nulla est, Quam quae confessos animo quoque subjugat hostes ...
Верю в смерть после жизни, любовь после секса и в крем после бритья ...

#6 tomatensaft

tomatensaft

    Samurai Jack

  • Пользователь
  • 449 сообщений
  • Откуда:Tallinn

Отправлено 25 июля 2005 - 10:44

Epps, ты так и объясняй: как в switch-case вставить результат сравнения регулярного выражения с текстом... Для этого имеются соответствующие функции... Читай мануал по теме "regular expressions": http://ee.php.net/ma...u/ref.regex.php

Выбор между switch и if/else диктуется не только количеством условий, но и их однородностью... Плюс это еще дело стиля и эстетики... Но в данном случае, мне кажется, проще всего использовать множественные if/else... Мое чутье мне подсказывает, что код будет проще...

Вот пример:

//$text=...
$num_regex="[0-4]{4}";
if(!empty(preg_grep($text, $num_regex))){
  // matched
} else {
  // did not match
}

(уточни порядок и количество аргументов у preg_grep()!)

Сообщение изменено: tomatensaft (25 июля 2005 - 10:53 )

  • 0
"This is all I want'd t' say 'bout dat..." © Forest Gump

#7 Epps

Epps

    20/05/2005

  • Постоялец
  • 830 сообщений
  • Откуда:C:/Estonia/Tallinn

Отправлено 31 июля 2005 - 13:37

поковырялся в регулярных выражениях и сделал так:
if (preg_match ("/^\d{4}$/i", $page)) {

а в выбор между elseif и switch, выбрал первое...
  • 0
Empty your mind, be formless. Shapeless, like water.
If you put water into a cup, it becomes the cup. You put water into a bottle and it becomes the bottle. You put it in a teapot it becomes the teapot. Now, water can flow or it can crash.
Be water my friend

#8 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 31 июля 2005 - 20:40

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

Если тебе надо проверить, является ли переменная числом, то есть функция is_numeric( $var); чтобы узнать длину строки, в т.ч. и состоящей из цифр, можно заюзать функцию strlen( $var );

Регулярные выражения нужны для более сложных вещей. Так что твой пример - это бред :) И запомни золотое правило, никогда не используй регурярных выражений, если их можно чем-то заменить, т.к. они очень тормозные. Ты конечно этого тормоза не заметишь, но поверь наслово или сходи на http://www.phpclub.ru/talk и воспользуйся поиском ;)

Добавлено в [mergetime]1122835237[/mergetime]
Если ты ожидаешь от юзера ввода числа, воспользуйся функцией intval() http://www.php.net/intval
  • 0

#9 Epps

Epps

    20/05/2005

  • Постоялец
  • 830 сообщений
  • Откуда:C:/Estonia/Tallinn

Отправлено 01 августа 2005 - 10:19

мне просто нужно проверить, является ли значениние переменной числом из 4 цифр.

если ты говоришь, что регулярные слишком тормознутые, то лучше так:
if (is_numeric($f) && strlen($f)==4)

Добавлено в [mergetime]1122884347[/mergetime]
в общем задача проста - через URL приходит название страницы которую надо показать. всего 4 варианта страниц с именем, и много страниц из базы данных имеющих порядковый номер в виде 0001 и т.д для этого и нужна была проверка.

если несложно, расскажи в 2 словах какими функциями надо обрабатывать данные пришедшие от поользователя. буть то через URL или форму.
  • 0
Empty your mind, be formless. Shapeless, like water.
If you put water into a cup, it becomes the cup. You put water into a bottle and it becomes the bottle. You put it in a teapot it becomes the teapot. Now, water can flow or it can crash.
Be water my friend

#10 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 01 августа 2005 - 10:32

htmlspecialchars() конвертирует специальные символы в мнемоники HTML

Вообще, всё зависит от задачи! Если тебе ещё надо вставить текст в базу, то используй в дополнение mysql_escape_string() чтобы на какой-нить кавычке не получить варнинг)

И magic_quotes_gpc выруби, чтобы кавычки не экранировались уже на этапе передачи данных в скрипт)
  • 0

#11 Epps

Epps

    20/05/2005

  • Постоялец
  • 830 сообщений
  • Откуда:C:/Estonia/Tallinn

Отправлено 18 августа 2005 - 12:31

теперь новый вопрос)

допустим есть массив:
Array ( [0] => Mercedes
[1] => BMW
[2] => Audi
[3] => BMW
[4] => Mercedes
[5] => Mercedes )

Как посчитать, сколько раз в нём повторяется каждый элемент? Тоесть так: Mercedes - 3
BMW - 2
Audi - 1
Копаюсь в списке функций для работы массива но ничего подобного не нашёл.

Добавлено в [mergetime]1124361075[/mergetime]
наверняка можно "в ручную" перебирать каждый элемент массива через foreach и сравнивать с теми что уже есть, записывая отдельно кол-во повторений. но до меня никак не дойдёт, как это осуществить :)
  • 0
Empty your mind, be formless. Shapeless, like water.
If you put water into a cup, it becomes the cup. You put water into a bottle and it becomes the bottle. You put it in a teapot it becomes the teapot. Now, water can flow or it can crash.
Be water my friend

#12 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 18 августа 2005 - 13:09

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

<?php
$array = array( 'Mercedes',
'BMW',
'Audi',
'BMW',
'Mercedes',
'Mercedes' );

foreach ( $array as $item )
{
	isset( $output[$item] ) ? $output[$item]++ : $output[$item] = 1;
}

echo '<pre>';
print_r( $output );
?>

Вывод:
Array
(
    [Mercedes] => 3
    [BMW] => 2
    [Audi] => 1
)


Добавлено в [mergetime]1124363364[/mergetime]
Пример 1. array_count_values()
$array = array (1, "hello", 1, "world", "hello");
print_r(array_count_values ($array));


На выходе будет: Array
(
[1] => 2
[hello] => 2
[world] => 1
)
  • 0

#13 Epps

Epps

    20/05/2005

  • Постоялец
  • 830 сообщений
  • Откуда:C:/Estonia/Tallinn

Отправлено 18 августа 2005 - 13:20

Setor, спасибо! вот значит как можно было) но использовать лучше второй способ.
  • 0
Empty your mind, be formless. Shapeless, like water.
If you put water into a cup, it becomes the cup. You put water into a bottle and it becomes the bottle. You put it in a teapot it becomes the teapot. Now, water can flow or it can crash.
Be water my friend

#14 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 18 августа 2005 - 13:22

Epps, конечно второй... эту функцию я нашёл за 1 минуту просмотра мануала - раздел "Функции массивов". Не знаю куда ты смотрел!
  • 0

#15 Epps

Epps

    20/05/2005

  • Постоялец
  • 830 сообщений
  • Откуда:C:/Estonia/Tallinn

Отправлено 18 августа 2005 - 13:30

я в книжке искал :rolleyes:
буду впредь и мануалом пользоваться :)

Добавлено в [mergetime]1124364611[/mergetime]
Setor, а почему к полученному массиву (
[1] => 2
[hello] => 2
[world] => 1
)
нельзя обращаться поэлементно?

мне нужно выводить его в несколько другом формате, но он выводиться только через print_r!
  • 0
Empty your mind, be formless. Shapeless, like water.
If you put water into a cup, it becomes the cup. You put water into a bottle and it becomes the bottle. You put it in a teapot it becomes the teapot. Now, water can flow or it can crash.
Be water my friend

#16 Epps

Epps

    20/05/2005

  • Постоялец
  • 830 сообщений
  • Откуда:C:/Estonia/Tallinn

Отправлено 18 августа 2005 - 13:42

юзай foreach( $output as $item => $value )

то что нужно, ещё раз спасибо!
  • 0
Empty your mind, be formless. Shapeless, like water.
If you put water into a cup, it becomes the cup. You put water into a bottle and it becomes the bottle. You put it in a teapot it becomes the teapot. Now, water can flow or it can crash.
Be water my friend

#17 zedirtybastard

zedirtybastard
  • Пользователь
  • 499 сообщений

Отправлено 25 августа 2005 - 22:01

switch - фигня, не советую их использовать.
regexp - наоборот советую, не слушай всяких умников, которые вместо одного регулярного выражения ищут и чего-то там заменяют кучей str_replace.ов.

И вообще, использовать вместе html и код по крайней мере неразумно, все нормальные люди используют темплейты.
  • 0

#18 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 26 августа 2005 - 20:05

zedirtybastard, а ты я смотрю, в PHP гуру ;)

Использование к-либо элементов языка зависит от каждого конкретного случая, так что советую тебе не давать глупых, необоснованных советов!
  • 0