Php SimpleXML到数组
我加载了一些XML,它生成了一个类似这样的SimpleXML对象(只显示一个对象) 我想做的是创建一个客户端名称和客户端ID的数组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
[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();
}