Forum Webscript.Ru
		Программирование => PHP => Тема начата: Nikman от 22 Августа 2003, 15:36:41
		
			
			- 
				Есть строка :
 
 type=type_value size=size_value name="Name string value" ...
 
 Нужно чтоб при проходе через некоторую функцию выходил масив елементов:
 $element[\'type\']=type_value;
 $element[\'size\']=size_value;
 $element[\'name\']="Name string value";
 
 Для меня вся проблема заключаеться в текстовом значении... так как там встречаються пробелы а без них это можно было реализовать с помощью explode("",$string)... а дальше уже бы разделял отдельно каждую переменную по =...
 
 Подскажите плиз!
- 
				а нельзя это писать в столбик?
			
- 
				и можно поинтересоватьмся, откуда такая строка берется?
			
- 
				RomikChef 
 В столбик не очень то удобно так как эта строка это параметры некоторого тега который я использую в шаблонах :)
 Например:
 type=new_listing name="lining name" ...
 Эту строку скрипт заменяет на листинг с именем "listing name"
 можно также задавать и другие параметры - size , style и тд...
- 
				только вот вся проблема в том что я не знаю как разбить эту строку на части типа type=new_listing и тд.. так как по пробелам оно разбивает также и "lining name" на "listing" и на "name"
			
- 
				Nikman:
 type=new_listing name="lining name" ...
 
 
 
 new_listing
 lining name
 ...
 
 
 [p]xml[/p]
- 
				ThE0ReTiC 
 А как на меня это не очень удобно... так как переменные не стандартные и пользователь может использовать свои переменные... Так как type - это имя подключаэмого модуля а остальные переменные просто могут использовать в этом модуле и в каждом моделе разные... таким образом так не очень то и выйдет...
- 
				$some_string = "type=type_value size=9 name=\\"Name string value\\"";
 preg_match("/^type=(\\S+) *size=(\\d+) *name=\\"([^\\"]*)\\"$/", $some_string, $match);
 print_r($match);
 например, так...
- 
				Yukko 
 
 Неа :) Имена переменных name, size и тд не должны быть по дефолту... это должен быть универсальный скрипт который любую строку типа :
 
 element1_name=element1_value - где element1_value может быть строкой
 
 должен разбивать на части например $val[1]="element1_name=elemet1_value"; и потом я уже эти части разбиваю на переменную element1_name и этой переменной присваиваю её значение...
- 
				preg_match_all("/([a-z]+)=([\\w]+) */", $some_string, $matches, PREG_SET_ORDER);
 
 а вот так:
 preg_match_all("/([a-z]+)=([\\w]+|\\"[a-zA-z\\s]+\\") */", $some_string, $match, PREG_SET_ORDER);
 и строки с пробелами обработать можно.
 Тогда match[0][1] будет содержать "type" из твоей строки, match[0][2] - "type_value",  match[1][1] - "size"  match[1][2] - 9 и т.д.
- 
				Люди, вы чего?!
 Кто учил меня велосипед не изобретать? ;)
 $elements = preg_split ("/\\s+/", $string);
 А потом уже коцай по "="...
- 
				FreeSpace 
 А ты прежде чем писать, проверь :) и посмотри что оно у тебя на тестовую строку выведет...
 $some_string = "type=type_value size=9 name=\\"Name string value\\"";
 $elements = preg_split ("/s+/", $some_string);
 print_r($elements);
 
 Выводит:
 Array (-  => type=type_value [1] => ize=9 name="Name [2] => tring value" ) 
 
 Так что с велосипедом от Бублика лучше... он работает!
- 
				Прошу прощения, не доглядел :(
 
 PS: форум съел \\ перед s