PHP:从 XML 字符串中提取数据并添加到数组

Posted

技术标签:

【中文标题】PHP:从 XML 字符串中提取数据并添加到数组【英文标题】:PHP: extract data from XML string and add to array 【发布时间】:2014-06-17 18:59:46 【问题描述】:

我有一个由 SQL 查询生成的 XML 字符串,如下所示(已缩短)。 我的网站设置为从 SQL 中获取此信息,并且 $objRev->reviews->countries 将为我提供 XML 中每个评论的国家/地区部分的内容。

Countries 仅包含用逗号和空格分隔的文本(国家名称)。

在下面的示例中,我的输入变量是:

var1 = "Austria, Belgium, Bulgaria, Croatia, Cyprus";
var2 = "Brazil, Sweden, United Kingdom";

预期输出:“奥地利、比利时、巴西、保加利亚、克罗地亚、塞浦路斯、瑞典、英国”

谁能告诉我如何使用 php 将这些变量的内容组合到一个数组中并按字母顺序排序? 我的挑战是,并不总是有两个变量,它也可以是一个或多个,因为这取决于审查日期是否与给定的输入匹配,这里:2014-04-21 - 指标是dateMatch = 'Yes'

<root>
  <reviews>
    <review>2014-04-21</review>
    <revLong>21 Apr 2014</revLong>
    <revShort>2014-04-21</revShort>
    <dayDiff>0</dayDiff>
    <revStatus>past</revStatus>
    <countries>Austria, Belgium, Bulgaria, Croatia, Cyprus</countries>
    <dateMatch>Yes</dateMatch>
    <countryMatch>Yes</countryMatch>
  </reviews>
  <reviews>
    <review>2014-04-21</review>
    <revLong>21 Apr 2014</revLong>
    <revShort>2014-04-21</revShort>
    <dayDiff>0</dayDiff>
    <revStatus>past</revStatus>
    <countries>Brazil, Sweden, United Kingdom</countries>
    <dateMatch>Yes</dateMatch>
    <countryMatch>No</countryMatch>
  </reviews>
</root>

非常感谢您提供的任何帮助,蒂姆。

【问题讨论】:

【参考方案1】:

像这样简单的东西..使用simplexml_load_string()

$xml = simplexml_load_string($xml);
foreach ($xml->reviews as $child)

        $cnt[]=explode(',',$child->countries);

$arr = array_map('trim',call_user_func_array('array_merge',$cnt));
sort($arr);
echo implode(', ',$arr);

OUTPUT :

Austria, Belgium, Brazil, Bulgaria, Croatia, Cyprus, Sweden, United Kingdom

Demonstration

【讨论】:

非常感谢,这很好用 - 我只需按如下方式替换您的答案中的 foreach 以将其限制为我感兴趣的日期: if($child->dateMatch == "Yes ") $cnt[] = explode(",",$child->countries); - 你能解释一下“call_user_func_array”在这里做什么吗? @user2571510,结果是在嵌套数组下生成的,因此call_user_func_array 使用array_merge 来合并这些数组。 您可以为此使用array_walk。在sort($arr); 之后添加此array_walk($arr,function (&amp;$v) $v = '&lt;img src="someimage.jpg"/&gt;'.$v;); 你需要在sort()调用之后使用这个...array_walk($arr,function (&amp;$v) $v = "&lt;img src='".$v.".jpg'/&gt;".$v;); 太棒了 - 非常感谢!真的很感激它,它工作得很好。 :)【参考方案2】:

尝试使用 array_merge、sort 和 array_unique 函数:

$all = array_unique(sort(array_merge($var1, $var2)));

【讨论】:

sort() 返回一个布尔值,您不能将其传递给array_unique。它不会起作用。

以上是关于PHP:从 XML 字符串中提取数据并添加到数组的主要内容,如果未能解决你的问题,请参考以下文章

PHP 一个字符串,如何提取其中相同的字符?

如何从 php 中列出的数组中获取 xml 输出?

将 XML 数据提取到 php [重复]

php 从字符串和数组递归地提取JSON数据

从字符串正则表达式 PHP 中提取数值 [关闭]

如何在php中解析soap xml响应并从字符串中获取信息