XML 到 PHP 数组问题 - 列合并为单行而不是多行
XML to PHP array issue - Columns being combined into a single Row instead multiple rows
我已经完成了前面的所有问题,但找不到有效的解决方案。我过去没有与 XML 合作过,我感到有点困惑。我知道在打印 simplexml 时您看不到所有数据,但我无法让数据以我想要的方式结束。
我从 returns 只有 XML 的 CURL 请求中收集的数据如下:
<result>
<header>
<col>
<label>Account Id</label>
</col>
<col>
<label>Employee Id</label>
</col>
<col>
<label>Username</label>
</col>
<col>
<label>First Name</label>
</col>
<col>
<label>Last Name</label>
</col>
<col>
<label>New Status</label>
</col>
<col>
<label>Old Status</label>
</col>
<col>
<label>Changed</label>
</col>
<col>
<label>Email</label>
</col>
</header>
<body>
<row>
<col>4346088504</col>
<col>6534</col>
<col>Nalini.LastName</col>
<col>Nalini</col>
<col>LastName</col>
<col>Terminated</col>
<col>Active</col>
<col>02/01/2019 12:58p</col>
<col>email1</col>
</row>
<row>
<col>32103136</col>
<col>2835</col>
<col>Karen.LastName</col>
<col>Karen</col>
<col>LastName/col>
<col>Inactive</col>
<col>LOA</col>
<col>02/01/2019 07:27a</col>
<col>email2</col>
</row>
<row>
<col>4348430099</col>
<col>6652</col>
<col>elouise.LastName</col>
<col>Elouise</col>
<col>LastName</col>
<col>Active</col>
<col>LOA</col>
<col>02/01/2019 07:20a</col>
<col>email3</col>
</row>
</body>
<footer/>
</result>
这作为字符串返回并保存在变量 $result 中,如下所示
$result = simplexml_load_string(curl_exec($ch));
$result = $result->body;
我尝试了很多不同的方法 iterations/loops 来获得以下结构,其中包含所有字段,而不仅仅是我输入的示例字段:
$result = array(
'employees' => array(
array(
'KronosUniqueID' => '4346088504',
'KronosID' => '6534',
'FirstName' => 'Nalini',
'LastName' => 'LastName'
),
array(
'KronosUniqueID' => '32103136',
'KronosID' => '2835',
'FirstName' => 'Karen',
'LastName' => 'LastName'
)
array(
'KronosUniqueID' => '4348430099',
'KronosID' => '6652',
'FirstName' => 'Elouise',
'LastName' => 'LastName'
)
)
);
如果能提供一些帮助,我们将不胜感激。如果需要,最终输出也可以是一个对象。
这是提取数据的基本实现,由于您要重新标记字段,因此您将不得不手动执行此操作。展开映射以捕获您想要的数据。
$simpleXML = simplexml_load_string( $xml );
$output = array();
foreach( $simpleXML->xpath('//body/row') as $row )
{
$output[] = array(
'KronosUniqueID' => (int) $row->col[0],
'KronosID' => (int) $row->col[1],
'FirstName' => (string) $row->col[3],
'LastName' => (string) $row->col[4],
);
}
这是一个 "automatic" 版本,使用带有标签更正的标签。
$simpleXML = simplexml_load_string( $xml );
$labels = (array) $simpleXML->xpath('//header/col/label');
$labels[0] = 'KronosUniqueID';
$labels[1] = 'KronosID';
$labels = array_map( function( $string ){ return str_replace( ' ', '', $string ); }, $labels ); // removes space character
$output = array();
foreach( $simpleXML->xpath('//body/row') as $row )
{
$output[] = array_combine( $labels, (array) $row->col );
}
我已经完成了前面的所有问题,但找不到有效的解决方案。我过去没有与 XML 合作过,我感到有点困惑。我知道在打印 simplexml 时您看不到所有数据,但我无法让数据以我想要的方式结束。
我从 returns 只有 XML 的 CURL 请求中收集的数据如下:
<result>
<header>
<col>
<label>Account Id</label>
</col>
<col>
<label>Employee Id</label>
</col>
<col>
<label>Username</label>
</col>
<col>
<label>First Name</label>
</col>
<col>
<label>Last Name</label>
</col>
<col>
<label>New Status</label>
</col>
<col>
<label>Old Status</label>
</col>
<col>
<label>Changed</label>
</col>
<col>
<label>Email</label>
</col>
</header>
<body>
<row>
<col>4346088504</col>
<col>6534</col>
<col>Nalini.LastName</col>
<col>Nalini</col>
<col>LastName</col>
<col>Terminated</col>
<col>Active</col>
<col>02/01/2019 12:58p</col>
<col>email1</col>
</row>
<row>
<col>32103136</col>
<col>2835</col>
<col>Karen.LastName</col>
<col>Karen</col>
<col>LastName/col>
<col>Inactive</col>
<col>LOA</col>
<col>02/01/2019 07:27a</col>
<col>email2</col>
</row>
<row>
<col>4348430099</col>
<col>6652</col>
<col>elouise.LastName</col>
<col>Elouise</col>
<col>LastName</col>
<col>Active</col>
<col>LOA</col>
<col>02/01/2019 07:20a</col>
<col>email3</col>
</row>
</body>
<footer/>
</result>
这作为字符串返回并保存在变量 $result 中,如下所示
$result = simplexml_load_string(curl_exec($ch));
$result = $result->body;
我尝试了很多不同的方法 iterations/loops 来获得以下结构,其中包含所有字段,而不仅仅是我输入的示例字段:
$result = array(
'employees' => array(
array(
'KronosUniqueID' => '4346088504',
'KronosID' => '6534',
'FirstName' => 'Nalini',
'LastName' => 'LastName'
),
array(
'KronosUniqueID' => '32103136',
'KronosID' => '2835',
'FirstName' => 'Karen',
'LastName' => 'LastName'
)
array(
'KronosUniqueID' => '4348430099',
'KronosID' => '6652',
'FirstName' => 'Elouise',
'LastName' => 'LastName'
)
)
);
如果能提供一些帮助,我们将不胜感激。如果需要,最终输出也可以是一个对象。
这是提取数据的基本实现,由于您要重新标记字段,因此您将不得不手动执行此操作。展开映射以捕获您想要的数据。
$simpleXML = simplexml_load_string( $xml );
$output = array();
foreach( $simpleXML->xpath('//body/row') as $row )
{
$output[] = array(
'KronosUniqueID' => (int) $row->col[0],
'KronosID' => (int) $row->col[1],
'FirstName' => (string) $row->col[3],
'LastName' => (string) $row->col[4],
);
}
这是一个 "automatic" 版本,使用带有标签更正的标签。
$simpleXML = simplexml_load_string( $xml );
$labels = (array) $simpleXML->xpath('//header/col/label');
$labels[0] = 'KronosUniqueID';
$labels[1] = 'KronosID';
$labels = array_map( function( $string ){ return str_replace( ' ', '', $string ); }, $labels ); // removes space character
$output = array();
foreach( $simpleXML->xpath('//body/row') as $row )
{
$output[] = array_combine( $labels, (array) $row->col );
}