Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как еще можно решить эту задачу
 
 автор: ДобрыйУхх   (25.01.2010 в 19:40)   письмо автору
 
 

Всем привет

Задачка решена, а насколько оптимально и правильно, есть ли еще варианты без регулярок?


// ЗАДАНИЕ ИЗ УЧЕБНИКА
// Задача 4.6
/*Преобразуйте скрипт в листинге 4.31 таким образом, чтобы значения
параметров id_forum, idjrheme и id_post в строке запроса попадали в
переменные $ forum, $theme и $post, соответственно.

Листинг 4.31. Извлечение подстрок из строки запроса
$str = "http://www.softtime.ru/forum/
read.php?id_forum=l&id_theme=961&id_post=6806";
$tok = strtok($str,"?&");
while($tok = strtok("?S"))
{
echo "$tok<br>";
Результат:
id_forum=l id_theme=961 id_post=6806
*/

// МОЕ РЕШЕНИЕ
$str = "http://www.softtime.ru/forum/
read.php?id_forum=l&id_theme=961&id_post=6806";
echo "Исходная строка: \"{$str}\"<br><br>";

// Устанавливаем позицию указателя на знак "?"
$tok = strtok($str, "?&");
while ($tok = strtok("?&"))
{    
    // Позиция знака "_"
    $pLPos = strpos($tok, "_");
    // Позиция знака "="
    $pRPos = strpos($tok, "=", $pLPos);
    
    // Вырезаем имя переменной из строки запроса
    $name = substr($tok, $pLPos+1, $pRPos-$pLPos-1);
    // Сохраняем значение переменной из строки запроса
    $val = substr($tok, $pRPos+1);
        
    switch ($name)
    {
        case "forum": $forum = $val; break;
        case "theme": $theme = $val; break;
        case "post": $post = $val; break;
    }
            
}
echo "<br>Результат: forum = {$forum}, theme = {$theme}, post = {$post}";

  Ответить  
 
 автор: sim5   (25.01.2010 в 20:10)   письмо автору
 
   для: ДобрыйУхх   (25.01.2010 в 19:40)
 

Конечно можно, и прежде чем бросаться на регулярки, можно заглянуть в мануал:
<?
$str 
parse_url('http://www.softtime.ru/forum/read.php?id_forum=l&id_theme=961&id_post=6806');
parse_str($str['query'], $arr);
print_r($arr);
?>


PS. Кстати, у вас "руглярками" даже и не пахнет.

  Ответить  
 
 автор: Trianon   (25.01.2010 в 20:32)   письмо автору
 
   для: ДобрыйУхх   (25.01.2010 в 19:40)
 

Задача не решена.
Значения параметров (да и имена тоже) следует декодировать.
rawurldecode

и таки да. parse_url()

  Ответить  
 
 автор: ДобрыйУхх   (25.01.2010 в 21:01)   письмо автору
 
   для: ДобрыйУхх   (25.01.2010 в 19:40)
 

Спасибо

А не подскажите где вообще можно посмотреть исходный код функций php? и в частности реализацию parse_url()

  Ответить  
 
 автор: Trianon   (25.01.2010 в 22:09)   письмо автору
 
   для: ДобрыйУхх   (25.01.2010 в 21:01)
 

http://www.php.net/downloads.php

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования