Я близок к завершению скрипта, который использует simplexml для обработки некоторых данных, но я застрял на последнем.
Ну, не застрял, но любопытно и застрял.
$ tmp содержит мой XML (около 750 тыс.), И его цель - перевести его в формат для 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 - может 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")
)