在php中从xml节点提取值并添加到数组

在php中从xml节点提取值并添加到数组,php,arrays,xml,loops,Php,Arrays,Xml,Loops,我一直在寻找这个具体问题的答案,但没有找到答案——如果我忽略了什么,我深表歉意。。。这是我的问题。。。我正在构建两个数据库之间的集成,并用PHP编写代码。我从源API获得一个XML响应,然后需要从该响应中提取特定的数据值,并将它们添加到一个数组中,以便通过其API插入接收器数据库。我可以从源代码获取所需的数据值,但当我尝试将它们添加到接收器所需的数组格式时,我得到的数组包含键/值对,而不仅仅是值 下面是我用来提取构建阵列所需数据的代码的一小段: foreach($invoiceResponse-

我一直在寻找这个具体问题的答案,但没有找到答案——如果我忽略了什么,我深表歉意。。。这是我的问题。。。我正在构建两个数据库之间的集成,并用PHP编写代码。我从源API获得一个XML响应,然后需要从该响应中提取特定的数据值,并将它们添加到一个数组中,以便通过其API插入接收器数据库。我可以从源代码获取所需的数据值,但当我尝试将它们添加到接收器所需的数组格式时,我得到的数组包含键/值对,而不仅仅是值

下面是我用来提取构建阵列所需数据的代码的一小段:

foreach($invoiceResponse->operation->result->data->sodocument as $sodoc){
    $invoice = array("Invoice_ID"=>$sodoc->DOCNO, "Invoice_Date"=>$sodoc->WHENPOSTED)
}
生成的数组如下所示:

{"Invoice_ID":{"0":"SI-000525"},"Invoice_Date":{"0":"03\/22\/2018"}}
$query = "DOCHDRID = '".$sodoc->DOCID."'";
我想要的是:

{"Invoice_ID":"SI-000525","Invoice_Date":"03\/22\/2018"}
以下是源代码中xml格式的快照:

<response>
    <control>
        <status>success</status>
    </control>
    <operation>
        <authentication>
            <status>success</status>
            <sessiontimestamp>2018-04-12T08:14:55-07:00</sessiontimestamp>
        </authentication>
        <result>
            <status>success</status>
            <function>readByQuery</function>
            <data listtype="sodocument" count="1" totalcount="1" numremaining="0" resultId="">
                <sodocument>
                    <PROJECT>GER-0318-DIG-005</PROJECT>
                    <CONTACT.COMPANYNAME>FFF Production Service</CONTACT.COMPANYNAME>
                    <TYPE_OF_INVOICE>Bill in Full</TYPE_OF_INVOICE>
                    <WHENPOSTED>04/10/2018</WHENPOSTED>
                    <STATE>Pending</STATE>
                </sodocument>
...
我可以在一个简单的语句中提取数据,例如,一行代码,如下所示:

{"Invoice_ID":{"0":"SI-000525"},"Invoice_Date":{"0":"03\/22\/2018"}}
$query = "DOCHDRID = '".$sodoc->DOCID."'";
导致

DOCHDRNO = 95
因此,这里正确地提取了数据,但是当我使用相同的语法将这些值添加到数组中时,我遇到了如上所述的问题


我相信这是件容易的事,但我将非常感谢任何帮助!谢谢

它看起来像是在
$sodoc->DOCNO
$sodoc->WHENPOSTED
中有数组,所以在获取数据时抓取第一个索引

foreach($invoiceResponse->operation->result->data->sodocument as $sodoc){
    $invoice = array("Invoice_ID"=>$sodoc->DOCNO[0], "Invoice_Date"=>$sodoc->WHENPOSTED[0])
}

谢谢你的回复,但这并没有解决问题。我在原始问题中添加更多信息,看看这是否有帮助……答案和评论的结合解决了问题!产生的有效代码:
$invoice=array(“发票ID=>(字符串)$sodoc->DOCNO[0],“发票日期”=>(字符串)$sodoc->WHENPOSTED[0])
我唯一仍然遇到问题的是节点名为CONTACT.COMPANYNAME的数据项。当我对这些数据项使用相同的语法时,我会出现语法错误。有什么办法可以处理这些问题吗?忽略上面的第二个问题-在这里找到答案:[正确的语法是
数组(“State”=>(string)$sodoc->{'CONTACT.State'})
将值转换为适当的类型(不强制转换,它们是
simplexmlement
对象),例如
$invoice=array(“invoice\u ID”=>(int)$sodoc->DOCNO,“invoice\u Date”=>(string)$sodoc->WHENPOSTED);