我即将完成一个脚本,该脚本使用simplexml处理一些数据,但我被困在了最后。
嗯,不是卡住了,而是好奇和卡住了。
$tmp包含我的XML (大约750k),目标是将其转换为fputcsv (父数组,每行包含一个数组)的格式。
下面的代码行得通,但我并没有使用fputcsv并将其发送回用户,而是使用fputcsv创建了一个干净的数组,这是写CSV文件所不需要的大量开销,这无疑会给fputcsv带来问题。我已经将输出清理为几个标题列和几行,但实际上有20列和数百行。无论如何,在fputcsv之前进行清理?
// Process XML response into arrays for fputcsv
$csv = array();
$xml = simplexml_load_string($tmp);
// Create array and loop each column for header row
$header_row = array();
foreach ($xml->RESPONSE->DATA->HEADER->COLUMN as $column) {
$header_row[] = $column;
}
$csv[] = $header_row;
// Create array and loop each column for header row
foreach ($xml->RESPONSE->DATA->ROW as $row) {
$data_row = array();
foreach ($row->COLUMN as $datacolvalue){
$data_row[] = $datacolvalue;
}
$csv[] = $data_row;
unset($data_row);
}
// Output var to check for accuracy (later add fputcsv)
var_dump($csv);输出(如果需要,print_r- can var_dump ):
Array
(
[0] => Array
(
[0] => SimpleXMLElement Object
(
[0] => date
)
[1] => SimpleXMLElement Object
(
[0] => name
)
)
[1] => Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[data_type] => text
)
[0] => Aug 01, 2011
)
[1] => SimpleXMLElement Object
(
[@attributes] => Array
(
[data_type] => text
[id] => 8699636
)
[0] => bfxgbfgxbfbgxfsfsdf
)
)
[2] => Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[data_type] => text
)
[0] => Aug 01, 2011
)
[1] => SimpleXMLElement Object
(
[@attributes] => Array
(
[data_type] => text
[id] => 8699694
)
[0] => bfxgbfgxbfbgxf
)
)
)所需的输出(针对每个额外的列进行推断并删除@attributes):
array(
array("date","name"),
array("Aug 01, 2011","bfxgbfgxbfbgxfsfsdf"),
array("Aug 01, 2011","bfxgbfgxbfbgxf")
)发布于 2011-08-31 23:28:01
回答我自己的问题,因为我可能没有很好地解释它,但是指定一个(字符串)将我带到我需要的地方。
发布于 2011-08-31 22:11:44
试着改变
foreach ($xml->RESPONSE->DATA->HEADER->COLUMN as $column) {至
$columns = (array)$xml->RESPONSE->DATA->HEADER->COLUMN;
foreach ($columns as $column) {这应该会将SimpleXML对象转换为简单的数组。这应该会消除“开销”。对foreach ($row->COLUMN as $datacolvalue){执行相同的操作。
https://stackoverflow.com/questions/7258011
复制相似问题