Php SimpleXML数据处理
我即将完成一个使用simplexml处理一些数据的脚本,但我最后还是被卡住了 嗯,不是卡住了,而是好奇和卡住了 $tmp包含大约750k的我的XML,目标是将其转换为fputcsv的格式。fputcsv是一个父数组,每行包含一个数组 下面的内容可以工作,但我可以使用fputcsv并将其发送回用户,而不是一个干净的数组,这会带来很多开销,我不需要将这些开销写入CSV文件,这无疑会给我带来fputcsv问题。我已经将输出清理为几个标题列和几行,但实际上有20列和数百行。在fputcsv之前是否需要清洁Php SimpleXML数据处理,php,arrays,object,simplexml,Php,Arrays,Object,Simplexml,我即将完成一个使用simplexml处理一些数据的脚本,但我最后还是被卡住了 嗯,不是卡住了,而是好奇和卡住了 $tmp包含大约750k的我的XML,目标是将其转换为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);
输出打印\u r-如果需要,可以进行变量转储:
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")
)
试着改变
foreach ($xml->RESPONSE->DATA->HEADER->COLUMN as $column) {
到
它应该将SimpleXML对象转换为简单数组。这样可以减少开销。对foreach$row->COLUMN执行与$datacolvalue相同的操作{.回答我自己的问题,因为我可能解释得不够好,但是指定一个字符串让我达到了我需要的位置。很难想象你在寻找hanks@Znarkus,但是如果我没有错误地实现它,那么这样做会导致结构和数据的丢失。我只返回了第一列y、 所以间隔后面是日期,但没有其他内容。现在检查我的代码……如果需要属性,为什么不迭代它们并创建一个数组?否则,执行类似$data_row[]=array\u mergearray$datacolvalue,array$datacolvalue->attributes可能也能工作。抱歉-出现一些有线格式,这是我不需要的最内部属性,例如@attributes。从第一个内部数组开始,我需要标题行的字符串“date”和“name”。然后从下一行开始,我需要每个行的值。我在op中发布了一个示例谢谢你的来信。
$columns = (array)$xml->RESPONSE->DATA->HEADER->COLUMN;
foreach ($columns as $column) {