2013-10-08 1 views
1

я следующая строка:Анализировать псевдо XML тег в массив

$input = '[gallery ids="1151,1150,1149,1148,1147" name="ponny"]'; 

Мне нужно, чтобы разобрать его в массив, поэтому желаемый результат должен выглядеть так:

$output = array(
    'ids' => '1151,1150,1149,1148,1147', 
    'name' => 'ponny' 
); 

Псевдо имя тега gallery будет игнорировать.

Каков наиболее эффективный способ сделать это в PHP?

+1

Может быть, вы могли бы использовать [Код BBCode парсер] (http://php.net/manual/ en/book.bbcode.php), но я не знаю, работает ли это с несколькими аргументами. (BBCode обычно имеет один аргумент за тег, сразу после имени тега, например [img = myimage.jpg]) – feeela

+0

Я не хочу привлекать сюда какую-либо внешнюю библиотеку PHP. – hsz

+2

У вас есть неэффективный способ сделать это, вы недовольны? –

ответ

0

Я не знаю, насколько эффективно это, но вы можете просто включить вход в XML:

$input = '[gallery ids="1151,1150,1149,1148,1147" name="ponny"]'; 

$xml = str_replace(array('[', ']'), array('<', ' />'), $input); 

var_dump(new SimpleXMLElement($xml)); 
0

Как простое решение вы можете извлечь значения в кавычки

$input = '[gallery ids="1151,1150,1149,1148,1147" name="ponny"]'; 
preg_match_all('/\"([^\"]*?)\"/', $input, $matches); 
$output = array(
    'ids' => $matches[1][0], 
    'name' => $matches[1][1] 
); 

Выход var_dump($output) является

array (size=2) 
    'ids' => string '1151,1150,1149,1148,1147' (length=24) 
    'name' => string 'ponny' (length=5) 
0
$idsStart=strpos('ids',$input); 
$idsValueStart=strpos('"',$input,$idsStart); 
$idsValueEnd=strpos('"',$input,$idsValueStart); 
$ids=substr($input,$idsValueStart,$idsValueEnd-$idsValueStart); 
$nameStart=strpos('name',$input); 
$nameValueStart=strpos('"',$input,$nameStart); 
$nameValueEnd=strpos('"',$input,$nameValueStart); 
$name=substr($input,$nameValueStart,$nameValueEnd-$nameValueStart); 
$output=array(); 
$output[]=$ids; 
$output[]=$name; 

не очень эффективный вид, но если порядок переменных в галерее массив изменений, он все равно должен дать правильный ответ.

Смежные вопросы