Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> собрать массив из строки через regex 
:(
    Опции темы
Elfet
Дата 27.1.2005, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Вот есть строка : page=www/home/news.,show=no,hi,bar=vremy dengi,link=yes,
Нужно получить массив:

$m['page'][0] => 'www',
$m['page'][1] => 'home',
$m['page'][2] => 'new',

$m['show'] => 'no',

$m['hi'] => 'null',

$m['bar'] => 'vremy dengi',

$m['link'] => 'yes',


и page - всегда первый параметр, и заканчивается всегда на точку - page=[что-то].

вот, пытался сам не выходит smile потом написал без regex, но получилось глючное уродство smile
прошу помощь! smile



--------------------
PM MAIL WWW Skype   Вверх
Alx
Дата 27.1.2005, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 6
Всего: 78



хмм, интересно, щас посижу))
Добавлено @ 19:48
только можно без RegEX? он мне не очень нарвится


--------------------
PM MAIL WWW ICQ   Вверх
Irokez
Дата 27.1.2005, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: 22
Всего: 53



Код

<?php
$str='page=www/home/news.,show=no,hi,bar=vremy dengi,link=yes,';
$pattern='/([\w]+)(=([^,]*))?/';
preg_match_all($pattern, $str, $m, PREG_SET_ORDER);
echo "<pre>";
print_r($m);
echo "</pre>";
?>

PM   Вверх
Elfet
Дата 27.1.2005, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Irokez, вот что у тебя выдаёт:
Код

Array
(
   [0] => Array
       (
           [0] => page=www/home/news.
           [1] => page
           [2] => =www/home/news.
           [3] => www/home/news.
       )

   [1] => Array
       (
           [0] => show=no
           [1] => show
           [2] => =no
           [3] => no
       )

   [2] => Array
       (
           [0] => hi
           [1] => hi
       )

   [3] => Array
       (
           [0] => bar=vremy dengi
           [1] => bar
           [2] => =vremy dengi
           [3] => vremy dengi
       )

   [4] => Array
       (
           [0] => link=yes
           [1] => link
           [2] => =yes
           [3] => yes
       )

)




здорово, но несовсем то! smile


--------------------
PM MAIL WWW Skype   Вверх
Alx
Дата 27.1.2005, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 6
Всего: 78



Код

<?
$m = array();
$str = "page=www/home/news.,show=no,hi,bar=vremy dengi,link=yes";
$mas = explode(",", $str);
for ($i=0;$i<count($mas);$i++)
{$lmas = explode("=", $mas[$i]);
for ($k=0;$k<count($lmas);$k+=2)
{$m[$lmas[$k]] = $lmas[$k+1];
if ($lmas[$k+1] == "")
{$m[$lmas[$k]] = "null";
}
}
}
// ... всякие извращения, которые делал человек, не умеющий печатать массив вида "ключ" => "значение"!
$keys = array_keys($m);
for ($f=0;$f<count($m);$f++)
{echo "&quot;{$keys[$f]}&quot; => &quot;{$m[$keys[$f]]}&quot;<br>";
}
?>


Это сообщение отредактировал(а) Alx - 27.1.2005, 20:18


--------------------
PM MAIL WWW ICQ   Вверх
Irokez
Дата 27.1.2005, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: 22
Всего: 53



Цитата

здорово, но несовсем то! smile

Elfet да вообще-то то, только надо было мой код просто довести до конечного результата,
как можно заметить, в элементах массива $m[n][1] записывается имя параметра, а в $m[n][3] - его значение, n тут меняется от 0 и до бесконечности ... вот и все =) тебе осталось только циклом записать результат, ну и еще одним регекспом разбить значения содержащие '/' на массив (к примеру - www/home/news), но я думаю тут ты уже справишься сам ...
PM   Вверх
Elfet
Дата 27.1.2005, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



ок! всем спасибо! smile


--------------------
PM MAIL WWW Skype   Вверх
Elfet
Дата 27.1.2005, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Код

     function get_about($de)
     {
       $loadsite=array();

       $loadpath=explode(",",$de);
       foreach($loadpath as $k=>$v)
       {
        $loadin=explode("=",$v );
        $loadsite[$loadin[0]]=$loadin[1];
       }

       $site=array(
       'path' => explode("/", str_replace(".", "", ($loadsite['page']?$loadsite['page']:"") )  ),
       'class' => $loadsite['class']?$loadsite['class']:"txt",
       'showinmenu' => $loadsite['showinmenu']?$loadsite['showinmenu']:"yes",
       'showtop' => $loadsite['showtop']?$loadsite['showtop']:"yes",
       );

     return $site;
    }

print_r ( get_about("page=h/www/into.,class=txt"));



--------------------
PM MAIL WWW Skype   Вверх
Alx
Дата 28.1.2005, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 6
Всего: 78



жаль, что ты уже нашёл ршение, я старался((

ну да ладно, всё к лучшему. надо сказать, что больше всего времени я потратил не на запись массива, а на его вывод(( вот я что у меня получилось:

Код

<?
$m = array();
$str = "page=www/home/news.,show=no,hi,bar=vremy dengi,link=yes";
$mas = explode(",", $str);
for ($i=0;$i<count($mas);$i++)
{$lmas = explode("=", $mas[$i]);
for ($k=0;$k<count($lmas);$k+=2)
{$m[$lmas[$k]] = $lmas[$k+1];
if (strrpos($lmas[$k+1], "/"))
{$llmas = explode("/", $lmas[$k+1]);
$m[$lmas[$k]] = "";
$m[$lmas[$k]] = array();
for ($n=0;$n<count($llmas);$n++)
{$m[$lmas[$k]][$n] = $llmas[$n].".";
}
}
if ($lmas[$k+1] == "")
{$m[$lmas[$k]] = "null";
}
}
}
// ... всякие извращения, которые делал человек, не умеющий печатать массив вида "ключ" => "значение"!
$keys = array_keys($m);
for ($f=0;$f<count($m);$f++)
{if (is_array($m[$keys[$f]]))
{for($l=0;$l<count($m[$keys[$f]]);$l++)
echo "\$m[{$keys[$f]}][{$l}] => &quot;{$m[$keys[$f]][$l]}&quot;<br>";
}
else
echo "\$m[{$keys[$f]}] => &quot;{$m[$keys[$f]]}&quot;<br>";
}
?>



--------------------
PM MAIL WWW ICQ   Вверх
Elfet
Дата 30.1.2005, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



всё равно спасибо!


--------------------
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0887 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.