我有一个字符串
$string= '<Label>1</Label><Value>1</Value><Label>2</Label><Value>2</Value><Label>3</Label><Value>3</Value><Label>4</Label><Value>4</Value><Label>5</Label><Value>5</Value>';
我需要将Label和Value标记值分成两个单独的数组。我尝试使用以下功能
function getTextBetweenTags($string, $tagname)
{
$pattern = "/<$tagname>(.*)<\/$tagname>/";
preg_match($pattern, $string, $matches, PREG_OFFSET_CAPTURE);
return $matches;
}
我创建了另一个函数来使它成为两个独立的数组
function formatChoices($choices)
{
$return['label'] = $this->getTextBetweenTags($choices, "Label");
$return['value'] = $this->getTextBetweenTags($choices, "Value");
return $return;
}
但它会返回以下内容
Array([label] => Array(
[0] => 1</Label><Value>1</Value><Label>2</Label><Value>2</Value><Label>3</Label><Value>3</Value><Label>4</Label><Value>4</Value><Label>5
[1] => 7
)
[value] => Array
(
[0] => 1</Value><Label>2</Label><Value>2</Value><Label>3</Label><Value>3</Value><Label>4</Label><Value>4</Value><Label>5</Label><Value>5
[1] => 23))
请帮忙。感谢
答案 0 :(得分:2)
试试这段代码。
<?php
$string= '<Label>1</Label><Value>1</Value><Label>2</Label><Value>2</Value><Label>3</Label><Value>3</Value><Label>4</Label><Value>4</Value><Label>5</Label><Value>5</Value>';
$array = json_decode(json_encode((array) simplexml_load_string('<data>'.$string.'</data>')),1);
print_r($array);
?>
答案 1 :(得分:1)
标签内部不能有&#39;&lt;&#39;和&#39;&gt;&#39;性格,所以改变方式
$pattern = "/<$tagname>([^<>]*)<\/$tagname>/";
PS对于XML操作,最好使用SimpleXML或DOM或......
答案 2 :(得分:0)
问题是它尝试匹配尽可能匹配的点。 (关键是贪心。)
修改:这应该有效:
$pattern = "/<$tagname>(.*?)<\/$tagname>/";