|
|
|
| ЗДравствуйте. Столкнулся с такой проблемой. Есть строка вида par1="asd" par2="qwe" par3="qweqw". Но это только пример, т.к. в реальной ситуации есть 3 типа этой строки, а фун-ия для неё должна быть одной и той же. Ну так вот. Нужно, чтобы после парсинга образовался массив $massiv вида
par1->asd
par2->qwe
par3->qweqw
З.Ы. Не торопитесь предлагать рег. выражения, т.к. точные названия параметров меняються.
Пример:
id="16788361.1" name="b2-k6" txt="Butterfly knife" massa="30" st="G,H" section="0" damage="S2-6" shot="1-2" quality="125" maxquality="125" nskill="0" OD="1" type="1.13"
id="11485650304.1" name="ba13-b10" txt="Vendetta jackboots" massa="320" st="B" min="dex=40,pow=50,str=40,int=50,intel=15,level=13,man!0" up="dex=19,pow=5,int=-5,str=14" section="0" protect="S26-60,E32-47,O10-20,B20-40,D10-15,P10-20,N15-30,Z5-10,H10-15" quality="900" maxquality="900" build_in="300.4" OD="55" type="0.1"
|
| |
|
|
|
|
|
|
|
для: *ast*
(21.01.2007 в 10:16)
| | Да... ещё... в примере перенос строки не учитывать ;-) случайно скопировал... тоесть фсё идёт одной строкой))) | |
|
|
|
|
|
|
|
для: *ast*
(21.01.2007 в 10:17)
| | Какие символы могут входить в имя?
Регулярное выражение, соответствующее такой записи может выглядеть примерно так:
/([0-9a-zA-Z_]+)=["]([^"]+)["][\s]*/
|
| |
|
|
|
|
|
|
|
для: *ast*
(21.01.2007 в 10:17)
| | Предлагаю так, если строка будет более или менее постоянна и между переменными будут пробелы:
// Дана строка для парсинга
$str = "id='16788361.1' name='b2-k6' txt='Butterfly knife' massa='30' st='G,H' section='0' damage='S2-6' shot='1-2'
quality='125' maxquality='125' nskill='0' OD='1' type='1.13'";
// Меняем в строке между каждыми переменными знак пробел на "%"
$str = str_replace(' ','%', $str);
//Затем разбиваем строку на массив из строк с разделителем "%"
$array_str = explode("%", $str);
// И вывод
for($i = 0; $i <= count($array_str); $i++)
{
echo "<br>".$array_str[$i];
}
|
И произвести замену и вставку нужных данных : id,name ,txt и т.д. в соответствующие строки массива | |
|
|
|
|
|
|
|
для: Pit0n
(21.01.2007 в 10:52)
| | сначала я сделал точна так же ;-) но потом получилась проблема... ты неучел пример, где в КОВЫЧКАХ могут быть пробелы ;-) и уже не получаецо. | |
|
|
|
|
|
|
|
для: *ast*
(21.01.2007 в 10:58)
| | А если произвести замену не пробела на %, а так: <' > на <'%> т.е. менять не только пробел на % но и символ кавычки перед пробелом на кавычку с процентом. Тогда вероятность зацепить лишний пробел уменьшается, но не поможет если в начале значения будет пробел. | |
|
|
|
|
|
|
|
для: *ast*
(21.01.2007 в 10:58)
| | Ивот что еще точно поможет: нужно задать, чтоб не менялись пробелы перед которыми стоят такие данные : " =" " Т.е. 1. знак равно, 2. кавычка, 3. пробел. Тогда при замене не будут затронуты первая кавычка и пробел, а только последняя кавычка и пробел. | |
|
|
|
|
|
|
|
для: Pit0n
(21.01.2007 в 10:52)
| | ничего неполучаеться (( | |
|
|
|
|
|
|
|
для: *ast*
(21.01.2007 в 10:16)
| | ДА)) ЕСТЬ)) Я СДЕЛАЛ ЭТО)))) вот кому нада...
<?php
$f=file('design.xml');
for ($i=0; $i<count($f); $i++) {
$fe=ereg_replace('<O ','',$f[$i]);
$fe=ereg_replace('/>','',$fe);
$fe=ereg_replace('" ','%',$fe);
$fe=ereg_replace('="','=',$fe);
$ar=split('%',$fe);
for ($x=0; $x<count($ar); $x++) {
$tek=split('=',$ar[$x],2);
if (!$tek[0]=='') { $item["$tek[0]"]=ereg_replace('"','',$tek[1]); }
}
//print_r($item); echo "<br><hr>\n";
$items["$item[txt]"]=$item;
}
print_r ($items);
?>
|
а вот файл design.xml:
<O id="16788361.1" name="b2-k6" txt="Butterfly knife" massa="30" st="G,H" section="0" damage="S2-6" shot="1-2" quality="125" maxquality="125" nskill="0" OD="1" type="1.13"/>
<O id="16788363.1" name="b1-g1" txt="FireFly knife" massa="6" st="G,H" min="int=8" section="0" damage="S3-8" count="50" shot="7-3" nskill="4" OD="1" type="1.1"/>
<O id="16788369.1" name="b2-k1" txt="Jackal knife" massa="40" st="G,H" min="level=3" section="0" damage="S5-9" shot="1-4" quality="250" maxquality="250" nskill="0" OD="1" type="1.16"/>
<O id="16788371.1" name="b2-k2" txt="Eviscerator knife" massa="48" st="G,H" min="str=8,level=4" section="0" damage="S8-13" shot="1-5" quality="300" maxquality="300" nskill="0" build_in="315.1" OD="1" type="1.1"/>
<O id="16788373.1" name="b2-k3" txt="Viper knife" massa="40" st="G,H" min="level=4,int=8" section="0" damage="S7-12" shot="1-5" quality="250" maxquality="250" nskill="0" build_in="315.1" OD="1" type="1.17"/>
<O id="16788375.1" name="b2-k7" txt="Rambo knife" massa="55" st="G,H" min="level=5,str=10,dex=8" section="0" damage="S9-13" shot="1-6" quality="300" maxquality="300" nskill="0" OD="2" type="1.97"/>
<O id="16788377.1" name="b2-k4" txt="War knife" massa="60" st="G,H" min="level=5,str=12,dex=10,sk0=15" section="0" damage="S10-18" shot="1-6" quality="400" maxquality="400" nskill="0" build_in="315.3" OD="2" type="1.97"/>
<O id="16788379.1" name="b3-k2" txt="Machete" massa="90" st="GH" min="str=14,dex=10,sk0=12" up="int=-1" section="0" damage="S10-25" shot="1-9" quality="350" maxquality="350" nskill="0" build_in="315.2" OD="2" type="1.99"/>
<O id="16788381.1" name="b3-k1" txt="Vakidsasi" massa="90" st="GH" min="dex=12,int=9,sk0=25" up="str=-2" section="0" cost2="0" damage="S12-36" shot="1-10" quality="400" maxquality="400" nskill="0" build_in="315.3" OD="2" type="1.99"/>
<O id="16788383.1" name="b4-k1" txt="Energy blade" massa="40" st="G,H" min="intel=1,sk0=8" section="0" damage="E6-11,B1-1" shot="1-6" quality="250" maxquality="250" nskill="0" OD="1" type="1.16"/>
<O id="16788385.1" name="b4-k2" txt="Plasma blade" massa="50" st="G,H" min="intel=2,sk0=15,int=20" section="0" damage="E8-14,B1-3" shot="1-7" quality="300" maxquality="300" nskill="0" build_in="315.2" OD="2" type="1.16"/>
|
точне это его кусок ;-) | |
|
|
|
|
|
|
|
для: *ast*
(21.01.2007 в 11:44)
| | Маленький совет: не используйте рег. выражения там, где можно обойтись строковыми функциями.
Тем более в таких количествах (да еще и в цикле) | |
|
|
|