我如何解析数组中的数组

时间:2019-05-29 12:23:41

标签: php arrays json parsing

我正在尝试解析数组中的信息。该数组来自我已转换为json的RSS feed。数组是:

<channel>
<item>
    <title> Title A </title>
    <description> Description A </description>
    <stuff url="google.com" type="search engine">
</item>

<item>
    <title> Title B </title>
    <description> Description B </description>
    <stuff url="yahoo.com" type="old stuff">
</item>
....

</channel>

我正在使用类似以下内容进行解析:

$newsoutput = json_decode(json_encode($the_RSS_Link), TRUE);

foreach ($newsoutput['channel']['item'] as $item) {
   echo $item['title'];
   echo "<br>";
   echo $item['description'];
   echo "<br>";
   echo $item['stuff']['url'];
   echo "<br>";
}

我可以同时获得“标题”和“描述”;但我无法提取“内容”中的“网址”值。我尝试了各种组合但没有运气

请告知。

谢谢

H。

3 个答案:

答案 0 :(得分:3)

这是一个经过测试的有效示例,需要使用simplexml_load_string()

<?php
$raw = <<<XML
<?xml version='1.0'?> 
<document>
    <channel>
        <item>
            <title>Title A</title>
            <description>Description A</description>
            <stuff url="google.com" type="search engine"></stuff>
        </item>

        <item>
            <title>Title B</title>
            <description>Description B</description>
            <stuff url="yahoo.com" type="old stuff"></stuff>
        </item>
    </channel>
</document>
XML;

$xml = simplexml_load_string($raw);
$newsoutput = json_decode(json_encode($xml), true);

foreach ($newsoutput['channel']['item'] as $item) {
    echo $item['title'];
    echo "<br>\n";
    echo $item['description'];
    echo "<br>\n";
    echo $item['stuff']['@attributes']['url'];
    echo "<br>\n";
}

输出:

Title A<br>
Description A<br>
google.com<br>
Title B<br>
Description B<br>
yahoo.com<br>

请注意,您提供给我们的XML文档无效,我必须关闭标签。

答案 1 :(得分:1)

假设您具有有效的XML(如果这是一笔有效的RSS费用,则应该使用),您可以使用SimpleXML解析器:

$xml = '<channel>
<item>
    <title> Title A </title>
    <description> Description A </description>
    <stuff url="google.com" type="search engine"/>
</item>

<item>
    <title> Title B </title>
    <description> Description B </description>
    <stuff url="yahoo.com" type="old stuff"/>
</item></channel>';
$x = new simplexmlelement($xml);
foreach($x->item as $item){
    echo $item->title . ' ' . $item->stuff['url'] . ' ' . $item->stuff['type'] . PHP_EOL;
}

https://3v4l.org/6ICrG

请注意,此处的stuff元素已被修改,因此可以自动关闭。

答案 2 :(得分:0)

如果RSS内容类似于您在示例中发布的内容,则应使用XML解析器而不是json_ *函数来解析RSS feed。

以下是一些使用SimpleXML https://www.php.net/manual/en/simplexml.examples-basic.php

的简单示例