2015-10-16 57 views
2

假設我有以下字符串$簡碼:提取字符串轉換成簡碼

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

我想轉換成一個數組,像這樣:

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

我怎麼可以這樣使用爆炸做?或者,我需要某種正則表達式嗎? 如果我使用

explode(" ", $shortcode) 

它會創建元素的數組,包括什麼是屬性附加傷害裏面;如果我使用相同的方式

explode("=", $shortcode) 

什麼是最好的方法?

+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]); 

這是很好的方法來檢查,如果在將其分配給$shortcode數組之前,所有$matches索引都存在。

1

正則表達式是一個辦法做到這一點:

$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); 
?>