Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SimpleXML到数组_Php_Arrays_Simplexml - Fatal编程技术网

Php SimpleXML到数组

Php SimpleXML到数组,php,arrays,simplexml,Php,Arrays,Simplexml,我加载了一些XML,它生成了一个类似这样的SimpleXML对象(只显示一个对象) 我想做的是创建一个客户端名称和客户端ID的数组 [data] => array ( 8430219 => Fake Client, 8430343 => Another Client, etc ) 目前,我可以将该名称放在适当的位置,但由于该id表示它是非法的偏移类型,因此很难使用该id。这就是我所拥有的 foreach($oXML->Jobs as $oEntr

我加载了一些XML,它生成了一个类似这样的SimpleXML对象(只显示一个对象)

我想做的是创建一个客户端名称和客户端ID的数组

[data] => array (
    8430219 => Fake Client,
    8430343 => Another Client,
    etc
)
目前,我可以将该名称放在适当的位置,但由于该id表示它是非法的偏移类型,因此很难使用该id。这就是我所拥有的

foreach($oXML->Jobs as $oEntry) {
    foreach ($oEntry->Job as $data) {
        $jobsArray = array(
            $data->Client->ID => $data->Client->Name
        );
    }
}
如何基于我拥有的SimpleXML对象创建数组


谢谢

首先,要获得所需的数组,您不能使用以下语法:

$jobsArray = array( $key => $val );
您必须使用以下内容:

$jobsArray[$key] = $val;
否则,在每个重复循环中,语法将覆盖先前的数组值

然后,我建议您使用XPath来简化整个过程。使用XPath查询,只需一次搜索即可检索一组节点

假设您有以下XML:

<?xml version="1.0"?>
<Jobs>
    <Job>
        <Client>
            <ID>8430219</ID>
            <Name>Fake Client</Name>
        </Client>
        <Client>
            <ID>8430220</ID>
            <Name>Fake Client 2</Name>
        </Client>
    </Job>
    <Job>
        <Client>
            <ID>8430221</ID>
            <Name>Fake Client 3</Name>
        </Client>
    </Job>
</Jobs>
您可以在
$clients
中获得所有
节点。然后,您可以通过以下方式创建阵列:

$result = array();
foreach( $clients as $client )
{
    $result[$client->ID->__toString()] = $client->Name->__toString();
}
这是
foreach
循环之后的
$result

数组
(
[8430219]=>假客户端
[8430220]=>假客户端2
[8430221]=>假客户端3
)
请注意,我们必须强制转换为字符串单节点(即SimpleXML对象):这是绝对必要的创建键,否则数组分配将失败。您可以使用
(string)$client->ID
而不是
$client->ID->\uu toString()


  • 阅读更多关于
  • 阅读更多关于
可能的副本
$clients = $oXML->xpath( '/Jobs/Job/Client' );
$result = array();
foreach( $clients as $client )
{
    $result[$client->ID->__toString()] = $client->Name->__toString();
}