我正在研究一个小型分析系统,该系统从不同的广告来源获取信息并将它们放入阵列中。现在我需要将这些信息导出到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循环来处理每个确切的值但是有一个更好的解决方案,比如递归函数吗?
答案 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);
}