2015-10-16 3 views
2

Пусть у меня есть следующая строка $ шорткод:Извлечение строки в шорткод

content="my temp content" color="blue" 

И я хочу, чтобы преобразовать в массив следующим образом:

array("content"=>"my temp content", "color"=>"blue") 

Как я могу это сделать с помощью взрываются ? Или мне нужно какое-то регулярное выражение? Если бы я должен был использовать

explode(" ", $shortcode) 

было бы создать массив элементов, в том числе то, что находится внутри atribute; то же самое произойдет, если я буду использовать

Какой был бы лучший подход?

+0

Вы можете использовать класс SimpleXmlElement извлечь атрибуты: http://stackoverflow.com/a/11440047/3647441 –

+0

Однако, я не хочу, чтобы преобразовать его в формат XML. Это просто простая строка. – tester2001

ответ

2

Работает ли это? Он основан на example, что я связан в моем предыдущем комментарии:

<?php 
    $str = 'content="my temp content" color="blue"'; 
    $xml = '<xml><test '.$str.' /></xml>'; 
    $x = new SimpleXMLElement($xml); 

    $attrArray = array(); 

    // Convert attributes to an array 
    foreach($x->test[0]->attributes() as $key => $val){ 
     $attrArray[(string)$key] = (string)$val; 
    } 

    print_r($attrArray); 

?> 
1

Возможно регулярное выражение не лучший вариант, но вы можете попробовать:

$str = 'content="my temp content" color="blue"'; 

$matches = array(); 
preg_match('/(.*?)="(.*?)" (.*?)="(.*?)"/', $str, $matches); 

$shortcode = array($matches[1] => $matches[2], $matches[3] => $matches[4]); 

Это хороший подход, чтобы проверить, все индексы $matches существуют до назначения их в массив $shortcode.

1

Regex это способ сделать это:

$str = 'content="my temp content" color="blue"'; 

preg_match_all("/(\s*?)(.*)=\"(.*)\"/U", $str, $out); 

foreach ($out[2] as $key => $content) { 
    $arr[$content] = $out[3][$key]; 
} 

print_r($arr); 
0

Вы можете сделать это с помощью регулярных выражений следующим образом. Я попытался сохранить регулярное выражение простым.

<?php 
    $str = 'content="my temp content" color="blue"'; 
    $pattern = '/content="(.*)" color="(.*)"/'; 
    preg_match_all($pattern, $str, $matches); 
    $result = ['content' => $matches[1], 'color' => $matches[2]]; 
    var_dump($result); 
?> 
Смежные вопросы