如何向数组中添加键和值


How to add keys and values to an array?

我使用下面的代码来解析下面的xml,并将每个人的id添加为数组的键,并将其名称添加为数组的值。

代码可以正常工作,但是数组不能。

   $array = array();
   $category = $xml->xpath('descendant::person');
    foreach ($person as $p) {
    $array[$p['id']] = $p['name'];
    }
 <?xml version="1.0" encoding="utf-8"?>
 <people>
   <person name="Joe" id="134">
   <person name="Jack" id="267">
   </person>
   </person>
   <person name="Ray" id="388">
   <person name="John" id="485">
   <person name="Rayan" id="900">
   </person>
   </person>
   <person name="Alex" id="590">
   </person>
 </people>

XML是无效的,但我不能使它有效。然而,代码是工作的,我只需要将id和值分配给数组。

这里有很多小问题…但是,最大的问题是不能使用simplexml对象节点作为数组中的索引。它必须手动转换为字符串或整数。您还可以稍微调整一下xpath表达式,您的循环不应该在$person上,它是一个不存在的变量,而是在$category上。试试下面的选项:

$array = array();
$category = $xml->xpath('//person');
while(list( , $p) = each($category)) {
        $array[(string)$p['id']] = (string)$p['name'];
}
print_r($array);

还要注意,如果您的XML不是有效的XML,那么它确实很重要…simplexml库永远无法在无效XML上正常工作(示例中的XML有一些不正确的嵌套)。

我不知道这是正确的方法,但我已经测试了这个,它的工作很好,

$xml = simplexml_load_string($response);
 $category = $xml->xpath('descendant::person');
 $array = array();
  foreach($category as $each){
    $name_obj = $each->attributes()->name[0];
     $name_json = json_encode($name_obj);
    $name_array = json_decode($name_json, TRUE);

    $id_obj = $each->attributes()->id[0];
  $id_json = json_encode($id_obj);
  $id_array = json_decode($id_json, TRUE);
  $array[$id_array[0]] = $name_array[0];
}
 print_r($array);

您确定XML不应该是这样的吗?:

<?xml version="1.0" encoding="utf-8"?>
<people>
    <person name="Joe" id="1"></person>
    <person name="Jack" id="2"></person>
    <person name="Ray" id="3"></person>
    <person name="John" id="4"></person>
    <person name="Alex" id="5"></person>
</people>