Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / пасринг строки / 9 сообщений из 9, страница 1 из 1
14.09.2012, 14:24:21
    #37957826
Lisichkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пасринг строки
Добрый день!
Я в php новичок – не могли бы подсказать правильно ли я реализую пасринг строки типа:
"NAME1=VALUE1; NAME2=VALUE2"

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    $array = explode(";", $data);
    $key = array_search(' NAME1', $array);
    $NAME1 = '';
    if (!($key===false))	{
 		$NAME1 = explode("=", $array[$key], 2)[1]
    }
    $key = array_search(' NAME2', $array);
    $NAME2 = '';
    if (!($key===false))	{
		$NAME2 = explode("=", $array[$key], 2)[1]
    }



(Нужно получить значение VALUE1 и VALUE2 в переменные $NAME1 и $NAME2
...
Рейтинг: 0 / 0
14.09.2012, 14:35:12
    #37957856
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пасринг строки
LisichkinНужно получить значение VALUE1 и VALUE2 в переменные $NAME1 и $NAME2
Не совсем красиво плодить кучу переменных. Лучше и безопаснее держать в массиве ($params['NAME1'] и т.д.). Особенно, если вы САМИ это все разбираете. Хотя в вашем коде бояться нечего - вы разбираете только то, что нужно вам. Это безопасно. Но если завтра вам надоест 10-20 одинаковых блоков кода и вы решите заменить на универсальный разбор, то можете внести в код каку-нибудь уязвимость.

Тем не менее, открываем мануал и просматриваем доступный функционал:
http://php.net/manual/ru/ref.strings.php

К примеру, если бы вы разделяли параметры не точкой с запятой, а амперсандом как в url-ах, то достаточно было бы воспользоваться уже готовой функцией, которая так и называется "спарсить строку" (parse_str).
...
Рейтинг: 0 / 0
14.09.2012, 14:39:13
    #37957869
Lisichkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пасринг строки
Спасибо!
Мне просто нужно модифицировать код для боевого сервера...
а параметры я точно знаю - их нужно использовать в дальнейшем sql запросе.
...
Рейтинг: 0 / 0
14.09.2012, 19:36:21
    #37958412
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пасринг строки
Lisichkin,

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
$str = "NAME1=VALUE1; NAME2=VALUE2";
$results = array();
foreach (array_map('trim', explode(';', $str)) as $item) {
$item = explode('=',$item,2);
if(iszeof($item)==2) {
$result[$item[0]] = $item[1];
}
}
var_dump($result);
...
Рейтинг: 0 / 0
14.09.2012, 20:01:37
    #37958447
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пасринг строки
Lisichkin,

Код: php
1.
2.
3.
$str = "NAME1=VALUE1; NAME2=VALUE2";
parse_str(str_replace(';', '&', $str), $out);
print_r($out);
...
Рейтинг: 0 / 0
15.09.2012, 04:21:43
    #37958674
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пасринг строки
Lisichkin,

Код: php
1.
2.
3.
4.
5.
$str = "NAME1=VALUE1; NAME2=VALUE2";
preg_match_all('/(\w+)\=(\w+)/', $str, $out);
$out = array_combine($out[1], $out[2]);

print_r($out);
...
Рейтинг: 0 / 0
15.09.2012, 04:33:02
    #37958677
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пасринг строки
sscanf , да?
...
Рейтинг: 0 / 0
15.09.2012, 04:47:55
    #37958679
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пасринг строки
ScareCrowsscanf , да? Можно. Но как правильно задать строку формата без лишних распиливаний?
...
Рейтинг: 0 / 0
15.09.2012, 04:56:19
    #37958680
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пасринг строки
ScareCrow,

Можно к примеру так:
Код: php
1.
2.
3.
4.
5.
6.
$str = "NAME1=VALUE1; NAME2=VALUE2  ";

foreach (str_getcsv($str, $delimiter = ';') as $pair) {
	list($key, $value) = sscanf($pair, "%[^=]=%[^;];"); // работает
	echo $key . " " . $value . PHP_EOL;
}
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / пасринг строки / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]