PHP多维数组到平面csv

PHP多维数组到平面csv,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我正在开发一个小型分析系统,它从不同的广告来源获取信息,并将它们放入数组中。现在,我需要将这些信息导出到用于excel导入或其他报表软件的平面csv中 这是数组 Array ( [site1] => Array ( [source1] => Array ( [campaign1] => Array

我正在开发一个小型分析系统,它从不同的广告来源获取信息,并将它们放入数组中。现在,我需要将这些信息导出到用于excel导入或其他报表软件的平面csv中

这是数组

    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

我可以做嵌套的前循环来处理每个精确的值,但是有一个更好的解决方案,比如递归函数吗?< /p> ,而不是写出值或递归函数,考虑使用./p> 这可能会立即解决你的问题: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);
?>
希望这有帮助

编辑!递归地

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);
}

嗯,似乎我需要为每个站点、每个源、每个活动、每个广告fputcsvadvalues做正确的设置?是的,但你仍然不会因此而失去或获得任何内存使用。循环与递归函数完全相同。没有循环不能转换为递归函数,反之亦然。谢谢。我寻找递归函数更多的是为了更加通用——例如,如果我添加额外的数组维度,比如date。在这种情况下,无需更改递归函数这里是输出1141379168113.0382 1141379168113.0382 1141379168113.0382 1141379168113.0382 stackoverflow不允许换行,但它基本上是第一行的值,没有任何键名
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);
}