我有以下字符串:解析僞XML標籤數組
$input = '[gallery ids="1151,1150,1149,1148,1147" name="ponny"]';
我需要將其解析到一個數組,因此所需的輸出應該是這樣的:
$output = array(
'ids' => '1151,1150,1149,1148,1147',
'name' => 'ponny'
);
僞標籤名gallery
會被忽略。
什麼是在PHP中這樣做的最有效的方法?
我有以下字符串:解析僞XML標籤數組
$input = '[gallery ids="1151,1150,1149,1148,1147" name="ponny"]';
我需要將其解析到一個數組,因此所需的輸出應該是這樣的:
$output = array(
'ids' => '1151,1150,1149,1148,1147',
'name' => 'ponny'
);
僞標籤名gallery
會被忽略。
什麼是在PHP中這樣做的最有效的方法?
我不知道它是多麼有效,但你可以只是把輸入轉換成XML:
$input = '[gallery ids="1151,1150,1149,1148,1147" name="ponny"]';
$xml = str_replace(array('[', ']'), array('<', ' />'), $input);
var_dump(new SimpleXMLElement($xml));
由於簡單的解決方案,你可以報價之間提取值
$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)
$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;
不是非常有效的尋找,但如果變量的畫廊中的順序數組改變它應該仍然給你正確的答案。
也許你可以使用[BB代碼分析器(http://php.net/manual/ en/book.bbcode.php),但我不知道這是否適用於多個參數。 (BBCode通常每個標籤有一個參數,緊跟在標籤名後面,例如[img = myimage.jpg]) – feeela
我不想涉及任何外部PHP庫。 – hsz
你有沒有效率的方式來做到這一點,你不滿意? –