пятница, 2 октября 2009 г.

Автоматическая инициализация параметров скрипта

Функция parse_str() получает строку, имеющую формат запроса к php-скрипту, извлекает из неё все параметры и сохраняет в соответствующих переменных. Заметьте, что функция ничего не возвращает, то есть больше похожа на процедуру.

Итак, пусть ваш сценарий называется page.php и пусть он был запущен с такими параметрами: page.php?act=show&id=3. Если в этом сценарии присутствует такая строка:


// ничего не возвращает, но инициализирует переменные
parse_str($_SERVER['QUERY_STRING']);

То будут проинициализированы две переменные: $act значением 'show' и $id, равное 3.

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


parse_str($_SERVER['QUERY_STRING'], $query_mass);
echo $query_mass['act']; // == 'show'
echo $query_mass['id'];  // == 3

среда, 23 сентября 2009 г.

Удаление тэгов из строки текста при помощи strip_tags

Предположим, что нам требуется вывести часть новостного сообщения в виде строки простого текста, используя при этом текст форматированный. К примеру, определённое количество символов, после которых идёт ссылка на полный текст новости со словами "читайте далее...". Довольно распространённый способ генерации анонса новости.

Самое сложное здесь убрать из форматированного текста все тэги, оставив при этом сам текст новости. Но эту задачу нам поможет решить функция strip_tags(). Первым параметром она принимает форматированную в html строку, а вторым - тэги, которые всё же нужно оставить. Например, тэги абзаца.


$str = "<p><strong>жирный</strong> <em>курсив</em>.</p>";
echo $str;
echo strip_tags($str, "<p>");

Обратите внимание, в каком виде записано исключение - в виде открывающего тэга. Смотрим результат:


<p><strong>жирный</strong> <em>курсив</em>.</p>
<p>жирный курсив.</p>

Как видим, из второй строки были удалены все тэги, кроме абзаца. Если в функцию не передавать второй параметр, то будут удалены вообще все тэги. Если требуется к исключению добавить ещё тэги, то просто пишем их открывающие тэги подряд в одной строке.

вторник, 8 сентября 2009 г.

Повтор одной строки несколько раз

Бывают такие специфические задачи в веб-деве, когда требуется вывести одну и ту же строку подряд n-ое количество раз. Как правило, это требуется для красивого форматирования данных.

Например, вам требуется поставить несколько переносов строки подряд (тэг br). Вы конечно можете их прямо в коде и прописать. Но можно прибегнуть к стандартной функции PHP str_repeat() и выполнить эту же задачу более элегантно.

$str = "Привет!";
echo str_repeat($str, 5);

В результате получаем следующее:

Привет!Привет!Привет!Привет!Привет!

понедельник, 7 сентября 2009 г.

Смешать символы в строке

str_shuffle() - данная функция настолько специфична, что её применение я вижу только в играх. Или для генерации "случайных" паролей.

$str = "ПРИВЕТ";
echo str_shuffle($str);

Итак, имеем строку текста. На выходе получаем мешанину, причём каждый раз разную. Несколько результатов работы функции:

  • ВЕТПРИ
  • РТПИЕВ
  • ПИТВРЕ
  • ИПРВЕТ

Замечание: мне не удалось заставить функцию корректно работать с кодировкой UTF-8. Поэтому если работаете с Юникодом, то придётся делать преобразования (функция iconv).

пятница, 21 августа 2009 г.

Разбиение строки на подстроки

В предыдущем посте мы разбирали, как можно соединить элементы массива в одну строку при помощи функции implode(). Теперь же перед нами встала обратная задача: разбить строку на подстроки по указанной строке-разделителю.

Ниже привожу код на PHP с комментариями. Обратите внимание на порядок аргументов в функции explode() - это очень важно.


// исходная строка
$str = 'Один, два, три, четыре, пять';
// передаём в функцию строку-разделитель и исходную строку
$ar = explode(', ', $str);
// выводим массив на экран
// каждую подстроку обрамляем звёздочками
foreach($ar as $v)
{
echo '*'.$v.'*';
}

На экране:

*Один* *два* *три* *четыре* *пять*

Таким образом, сама строка-разделитель никак не попадает на экран, что логично. Также обращаю ваше внимание, что после запятой в строке-разделителе следует пробел. Если убрать пробел и оставить только запятую, то на экране увидим пробел перед каждым словом, кроме первого. Звёздочками я обрамил подстроки как раз для наглядности подобных ситуаций.

*Один* * два* * три* * четыре* * пять*

пятница, 7 августа 2009 г.

Вывод слов через запятую

Довольно распространённая задача, когда у нас имеется массив строк и требуется вывести их на экран, разделяя запятыми. Можно конечно сделать вот так:


// создаём массив строк; в данной случае это все цвета радуги
$ar = array('красный', 'оранжевый', 'жёлтый', 'зелёный', 'голубой', 'синий', 'фиолетовый');
echo 'Все цвета радуги: ';
// проходим по каждому элементу из массива и ставим после него запятую
foreach($ar as $v)
{
echo $v.', ';
}

На выходе получаем следующее:

Все цвета радуги: красный, оранжевый, жёлтый, зелёный, голубой, синий, фиолетовый,

Всё бы ничего, да только запятая в конце мозолит глаз. Надо бы её убрать. А как? Можно, конечно, изгаляться и придумывать сложные алгоритмы, а можно почитать документацию и обнаружить замечательную функцию implode().

Итак, изменим наш код:


// создаём массив строк; в данной случае это все цвета радуги
$ar = array('красный', 'оранжевый', 'жёлтый', 'зелёный', 'голубой', 'синий', 'фиолетовый');
echo 'Все цвета радуги: ';
// передаём в функцию implode() строку-разделитель и наш исходный массив
echo implode(', ', $ar);

Смотрим на результат:

Все цвета радуги: красный, оранжевый, жёлтый, зелёный, голубой, синий, фиолетовый

Теперь нам уже не нужно заботиться о последовательности запятых. Функция всё сделает сама.