PHP:如何使用相同的键自动创建数组

时间:2014-09-11 07:19:21

标签: php arrays xml

我有一个包含有关人员信息的对象:

name, age, type

对于xml请求,我需要这样的人员数组:

<persons itc=3>
  <person id=1 type=H age=30 />
  <person id=2 type=H age=35 />
  <person id=3 type=H age=6 />
</persons>

我想自动创建它,例如使用foreach,xml结中的所有属性都标有&#34; @&#34;之前,以便在此之后调用的函数知道如何构建xml:

foreach($object->getPersons as $person) {
  $array['persons'] = array(
     'person' = array(
        '@id' =>  $person->getId(),
        '@type' =>  $person->getType(),
        '@age' =>  $person->getAge(),
     )
  )
}

但是,据我所知,不可能有一个具有多个具有相同名称的键的数组,逻辑......! Bute如何创建我的对象的xml-schema?有人能给我一个暗示吗? 谢谢!

4 个答案:

答案 0 :(得分:1)

如果您打算将所有数组命名为同名,为什么要命名它们? 不要创建关联数组,只需创建一个普通的索引数组,如:

$array['persons'] = array();
foreach($object->getPersons as $person) {
  $array['persons'][] = array( "@id"   => $person->getId(),
                               "@type" => $person->getType(),
                               "@age"  => $person->getAge() );
}

答案 1 :(得分:1)

$array变量的多维数组应该如下所示:

foreach($object->getPersons as $person) {
  $array['persons'][] = array(       // [] for auto increment.
     'person' = array(
        '@id' =>  $person->getId(),
        '@type' =>  $person->getType(),
        '@age' =>  $person->getAge(),
     )
  )
}

然后,您将使用

获取每个人的信息
$array['persons'][1] //for example.

答案 2 :(得分:1)

使用多维数组

foreach($object->getPersons as $person) { 
   $array['persons'] = array(
      Array(
        'person' = array( '@id' => $person->getId(), '@type' => $person->getType(), '@age' => $person->getAge(), 
      ), 
      Array(
        'person' = array( '@id' => $person->getId(), '@type' => $person->getType(), '@age' => $person->getAge(), 
      ),
    ) 
  ) 
}

答案 3 :(得分:1)

我建议,您要创建一个xml,使用这些值并直接创建XML。使用SimpleXMLElement执行此操作。您没有提供示例对象虚拟数据,所以我只是创建一个示例:

$persons = array(
    (object) array('id' => 1, 'name' => 'Person 1', 'age' => 200, 'type' => 'H'),
    (object) array('id' => 2, 'name' => 'Person 2', 'age' => 300, 'type' => 'B'),
);

$count = count($persons);

$xml = new SimpleXMLElement('<persons/>', LIBXML_NOEMPTYTAG);
$xml->addAttribute('itc', $count);
foreach($persons as $person) {
    $person_node = $xml->addChild('person', null);
    foreach($person as $attribute => $value) {
        $person_node->addAttribute($attribute, $value);
    }
}

echo htmlentities($xml->asXML());

应输出(基于虚拟数据):

<?xml version="1.0"?>
<persons itc="2">
    <person id="1" name="Person 1" age="200" type="H"/>
    <person id="2" name="Person 2" age="300" type="B"/>
</persons>