Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.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 SimpleXML数据处理_Php_Arrays_Object_Simplexml - Fatal编程技术网

Php SimpleXML数据处理

Php SimpleXML数据处理,php,arrays,object,simplexml,Php,Arrays,Object,Simplexml,我即将完成一个使用simplexml处理一些数据的脚本,但我最后还是被卡住了 嗯,不是卡住了,而是好奇和卡住了 $tmp包含大约750k的我的XML,目标是将其转换为fputcsv的格式。fputcsv是一个父数组,每行包含一个数组 下面的内容可以工作,但我可以使用fputcsv并将其发送回用户,而不是一个干净的数组,这会带来很多开销,我不需要将这些开销写入CSV文件,这无疑会给我带来fputcsv问题。我已经将输出清理为几个标题列和几行,但实际上有20列和数百行。在fputcsv之前是否需要清

我即将完成一个使用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) {