Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.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 从简单xml对象获取多维数组时出现的问题_Php_Arrays_Simplexml - Fatal编程技术网

Php 从简单xml对象获取多维数组时出现的问题

Php 从简单xml对象获取多维数组时出现的问题,php,arrays,simplexml,Php,Arrays,Simplexml,作为一名新手,我需要您的帮助,从simplexml对象获取多维数组。 假设我的数组如下所示: 只是为了获得想法: 此处$data是一个simplexml对象,包含以下xml: <users> <user> <id></id> <nm></nm> <gender> <male></male> <female></femal

作为一名新手,我需要您的帮助,从simplexml对象获取多维数组。 假设我的数组如下所示: 只是为了获得想法:
此处$data是一个simplexml对象,包含以下xml:

<users>
  <user>
    <id></id>
    <nm></nm>
    <gender>
      <male></male>
      <female></female>
    </gender>
  </user>
</users>

有什么建议吗?

您没有正确使用foreach迭代器。应该是这样的:

$users = simplexml_load_string($the_xml_thing_you_posted);

foreach ($users->user as $user)
{
    $arr[] = array(
        'id' => (string) $user->id,
        'nm' => (string) $user->nm
    );
}
现在我不知道你想用性别的东西做什么,两个元素都是空的,这意味着什么?

foreach($user as$k=>$v)
不会迭代
user
元素中的所有子元素。它迭代所有
user
元素,这些元素是
$users
的子元素。举例说明:

$data = new SimpleXMLElement('<data>
  <users id="1">
    <user id="user1a"></user>
    <user id="user1b"></user>
  </users>
  <users id="2">
    <user id="user2a"></user>
    <user id="user2b"></user>
  </users>
</data>');

foreach($data->users as $users)
{
  echo 'users id: ', $users['id'], "\n";
  foreach($users as $user)
  {
    echo "  user id: ", $user['id'], "\n";
  }
}
你可能想要更像

$data = new SimpleXMLElement('<data>
  <users>
    <user>
      <propA>A1</propA>
      <propB>B1</propB>
      <propC>C1</propC>
    </user>
    <user>
      <propA>A2</propA>
      <propB>B2</propB>
      <propC>C2</propC>
    </user>
  </users>
</data>');

$result = array();
foreach($data->users as $users)
{
  foreach($users as $user)
  {
    $arr = array();
    foreach($user->children() as $e) {
      $arr[$e->getName()] = (string)$e;
    }
    $result[] = $arr;
  }
}

print_r($result);
请回答这个问题——很难看出你们在说什么。假设数组是这样的:只是为了获得想法:?此外,将代码放在它们自己的行上并格式化,将非常有帮助。
users id: 1
  user id: user1a
  user id: user1b
users id: 2
  user id: user2a
  user id: user2b
$data = new SimpleXMLElement('<data>
  <users>
    <user>
      <propA>A1</propA>
      <propB>B1</propB>
      <propC>C1</propC>
    </user>
    <user>
      <propA>A2</propA>
      <propB>B2</propB>
      <propC>C2</propC>
    </user>
  </users>
</data>');

$result = array();
foreach($data->users as $users)
{
  foreach($users as $user)
  {
    $arr = array();
    foreach($user->children() as $e) {
      $arr[$e->getName()] = (string)$e;
    }
    $result[] = $arr;
  }
}

print_r($result);
Array
(
    [0] => Array
        (
            [propA] => A1
            [propB] => B1
            [propC] => C1
        )

    [1] => Array
        (
            [propA] => A2
            [propB] => B2
            [propC] => C2
        )

)