Php - 创建和显示多维数组

标签 php xml arrays multidimensional-array

我有这个 XML:

<eSummaryResult>
    <DocSum>
        <Id>11482001</Id>
        <Item Name="PubDate" Type="Date">2001 Jun</Item>
        <Item Name="EPubDate" Type="Date" />
        <Item Name="Source" Type="String">Adverse Drug React Toxicol Rev</Item>
        <Item Name="AuthorList" Type="List">
            <Item Name="Author" Type="String">Mantle D</Item>
            <Item Name="Author" Type="String">Gok MA</Item>
            <Item Name="Author" Type="String">Lennard TW</Item>
        </Item>
        <Item Name="LastAuthor" Type="String">Lennard TW</Item>
        <Item Name="Title" Type="String">Adverse and beneficial effects of plant extracts on skin and skin disorders.</Item>
        <Item Name="Volume" Type="String">20</Item>
        <Item Name="Issue" Type="String">2</Item>
        <Item Name="Pages" Type="String">89-103</Item>
        <Item Name="LangList" Type="List">
            <Item Name="Lang" Type="String">English</Item>
        </Item>
        <Item Name="NlmUniqueID" Type="String">9109474</Item>
        <Item Name="ISSN" Type="String">0964-198X</Item>
        <Item Name="ESSN" Type="String" />
        <Item Name="PubTypeList" Type="List">
            <Item Name="PubType" Type="String">Journal Article</Item>
            <Item Name="PubType" Type="String">Review</Item>
        </Item>
        <Item Name="RecordStatus" Type="String">PubMed - indexed for MEDLINE</Item>
        <Item Name="PubStatus" Type="String">ppublish</Item>
        <Item Name="ArticleIds" Type="List">
            <Item Name="pubmed" Type="String">11482001</Item>
            <Item Name="eid" Type="String">11482001</Item>
            <Item Name="rid" Type="String">11482001</Item>
        </Item>
        <Item Name="History" Type="List">
            <Item Name="pubmed" Type="Date">2001/08/03 10:00</Item>
            <Item Name="medline" Type="Date">2002/01/23 10:01</Item>
            <Item Name="entrez" Type="Date">2001/08/03 10:00</Item>
        </Item>
        <Item Name="References" Type="List" />
        <Item Name="HasAbstract" Type="Integer">1</Item>
        <Item Name="PmcRefCount" Type="Integer">3</Item>
        <Item Name="FullJournalName" Type="String">Adverse drug reactions and toxicological reviews</Item>
        <Item Name="ELocationID" Type="String" />
        <Item Name="SO" Type="String">2001 Jun;20(2):89-103</Item>
    </DocSum>
</eSummaryResult>

我想创建一个这样的数组:

$results2 = array(
    '0' => array(
        'id' => 'xxxxxxxx',
        'authors' => array(
            '0' => 'xxxxxxxxxx',
            '1' => 'xxxxxxxxxx',
            )
    ),
    '1' => array(
        'id' => 'xxxxxxxx',
        'authors' => array(
            '0' => 'xxxxxxxxxx',
            '1' => 'xxxxxxxxxx',
            )
    ),
);

我已经执行此功能以将数据从 XML 获取到 PHP,我试图将数据放入此结构中,然后显示。我对 PHP 没有太多经验,我在语法方面有问题。这是函数:

function esummary_query($db, $id) { 
    $context = stream_context_create(array(
      'http'=>array(
        'user_agent' => 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11'
       )
    ));

    $xml = file_get_contents('http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=' . $db . '&id=' . $id, FALSE, $context);

    $xml_file = simplexml_load_string($xml);
    $results2 = array();
    foreach ( $xml_file->DocSum as $items ) {
        $results2[]['id'] = $items->Id;
        $authors = $xml_file->xpath("//Item[@Name='Author']");
        foreach ($authors as $author) {
            $results2[]['authors'][] = $author;
        }
    }
    return $results2;
}


echo'<h3>id:</h3>' . $results2[0]['id'] . "<br> author:" . $results2[0]['authors'];

但是当我显示它时,显示了 id 但没有显示作者的名字。 print_r 显示:

Array ( [0] => Array ( [id] => SimpleXMLElement Object ( [0] => 11850928 ) ) [1] => Array ( [authors] => Array ( [0] => SimpleXMLElement Object ( [@attributes] => Array ( [Name] => Author [Type] => String ) [0] => LoPresti PJ ) ) ) [2] => Array ( [authors] => Array ( [0] => SimpleXMLElement Object ( [@attributes] => Array ( [Name] => Author [Type] => String ) [0] => Hambrick GW Jr ) ) ) )

谢谢大家!

最佳答案

添加计数器并将其用作数组键

function esummary_query($db, $id) { 
    $context = stream_context_create(array(
      'http'=>array(
        'user_agent' => 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11'
       )
    ));

    $xml = file_get_contents('http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=' . $db . '&id=' . $id, FALSE, $context);

    $xml_file = simplexml_load_string($xml);
    $results2 = array();
    $c=0;
    foreach ( $xml_file->DocSum as $items ) {           
        $results2[$c]['id'] = (string)$items->Id;
        $authors = $xml_file->xpath("//Item[@Name='Author']");
        foreach ($authors as $author) {
            $results2[$c]['authors'][] = (string)$author;
        }
        $c++;
    }
    return $results2;
}

示例输出

Array
(
    [0] => Array
        (
            [id] => 11482001
            [authors] => Array
                (
                    [0] => Mantle D
                    [1] => Gok MA
                    [2] => Lennard TW
                    [3] => Mantle D
                    [4] => Gok MA
                    [5] => Lennard TW
                )

        )

    [1] => Array
        (
            [id] => 11482001
            [authors] => Array
                (
                    [0] => Mantle D
                    [1] => Gok MA
                    [2] => Lennard TW
                    [3] => Mantle D
                    [4] => Gok MA
                    [5] => Lennard TW
                )

        )

)

关于Php - 创建和显示多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19924959/

相关文章:

php - 在 Twig 模板中设置多维数组中单个对象的值

Java从列中查找所有可能的组合

php - "php_connect_nonb() failed: Operation now in progress (115)"间歇性发生

PYTHON 解析位于目录中的多个文件 XML 并上传 CSV 文件中的数据

php - 错误 unicode 导出 csv 文件 - Laravel/Excel

xml - 带 HTTP 身份验证的 Wordpress XML 媒体导入

php - 从 curl POST 响应解析 XML

php - 有没有办法根据 raw[2] 对 PHP array_merge 进行排序?

php - 总数量大于一定数量后,删除 WooCommerce 中的 "proceed to checkout"按钮

php - 包含国家、地区、城市的注册表 - 如何管理 200 万条 mySQL 记录?