PHP多维数组平面csv

时间:2014-11-19 10:30:53

标签: php arrays multidimensional-array

我正在研究一个小型分析系统,该系统从不同的广告来源获取信息并将它们放入阵列中。现在我需要将这些信息导出到flat csv for excel import或其他报告软件。

这是数组

    Array (
        [site1] => Array
            (
                [source1] => Array
                    (
                        [campaign1] => Array
                            (
                                [ad1] => Array
                                    (
                                        [impressions] => 1141379
                                        [clicks] => 168
                                        [spent] => 113.0382
                                    )

                            )

                        [campaign2] => Array
                            (
                                [ad2] => Array
                                    (
                                        [impressions] => 612691
                                        [clicks] => 89
                                        [spent] => 78.0483
                                    )

                            )

                    )

            )
    [site1] => Array
        (
            [source2] => Array
                (
                    [campaign1] => Array
                        (
                            [ad1] => Array
                                (
                                    [impressions] => 877042
                                    [clicks] => 87
                                    [spent] => 86.13
                                )

                        )

                    [campaign2] => Array
                        (
                            [ad2] => Array
                                (
                                    [impressions] => 238749
                                    [clicks] => 19
                                    [spent] => 18.81
                                )

                        )

                )

        )
    )

这是我最终想要的csv

    site, source, campaign, ad, impressions, clicks, spent
    site1, source1, campaign1, ad1, 1141379, 168, 113.0382
    site1, source1, campaign2, ad2, 612691, 89, 78.0483
    site1, source2, campaign1, ad1, 877042, 87, 86.13
    site1, source2, campaign1, ad2, 238749, 19, 18.81

我可以做嵌套的foreach循环来处理每个确切的值但是有一个更好的解决方案,比如递归函数吗?

1 个答案:

答案 0 :(得分:0)

请考虑使用fputcsv()

,而不是写出值或制作递归函数

这可能会立即解决您的问题:D。

这是php手册中的一个例子:

<?php

$list = array (
    array('aaa', 'bbb', 'ccc', 'dddd'),
    array('123', '456', '789'),
    array('"aaa"', '"bbb"')
);

$fp = fopen('file.csv', 'w');

foreach ($list as $fields) {
    fputcsv($fp, $fields);
}

fclose($fp);
?>

它会输出:

aaa,bbb,ccc,dddd
123,456,789
"""aaa""","""bbb"""

希望这会有所帮助;)

编辑!递归

function recursive($array) {
  $fp = fopen('file.csv', 'w');
    foreach($array as $arr) {
      foreach($arr as $a) {
         if(is_array($a)) {
           return recursive($arr);
         } else {
           fputcsv($fp, $arr);
         }
      }
    }
  fclose($fp);
}