使用fputcsv从多维数组创建CSV

6

我可以帮您将多维数组转换成CSV文件。数组中的数据如下所示:

Array
(
 [0] => Array
    (
        [product_id] => 1111
        [name] => Alcatel One Touch Idol 2
        [keyword] => alcatel-one-touch-idol-2
        [options] => Array
            (
                [0] => Array
                    (
                        [price] => 54.0000
                    )

                [1] => Array
                    (
                        [price] => 42.0000
                    )

                [2] => Array
                    (
                        [price] => 10.0000
                    )

                [3] => Array
                    (
                        [price] => 
                    )

                [4] => Array
                    (
                        [price] => 
                    )

                [5] => Array
                    (
                        [price] => 
                    )

                [6] => Array
                    (
                        [price] => 
                    )

                [7] => Array
                    (
                        [price] => 
                    )

                [8] => Array
                    (
                        [price] => 
                    )

                [9] => Array
                    (
                        [price] => 
                    )

            )

    )

[1] => Array
    (...... etc)

我能够帮助您进行翻译。以下是您需要翻译的内容:

我获取了所有的顶层数据,但是一旦到达选项数组,我就会收到 Array to string conversion 报错信息。所以我有两个问题,首先我需要看看为什么会出现这个错误,然后我需要将所有产品的信息放在一行上进行 fputcsv。

到目前为止,我已经写了以下代码来将数组解析成一个 csv 文件:

$output = fopen("php://output",'w') or die("Can't open php://output");
            header("Content-Type:application/csv"); 
            header("Content-  Disposition:attachment;filename=product_catalog.csv"); 
            $first_line = explode(",", $first_line);
            fputcsv($output, $first_line);
            foreach($csv as $file) {
                fputcsv($output, $file);
            }
            fclose($output) or die("Can't close php://output");

如果有人能帮助我,我会非常感激。 谢谢。


它必须是CSV吗?接收方能否使用JSON代替?使用JSON意味着数组的结构将被保留(不会被扁平化),数据的重建更容易。 - DaveyBoy
2个回答

9
我建议先将每个数组展开:
foreach ($csv as $file) {
    $result = [];
    array_walk_recursive($file, function($item) use (&$result) {
        $result[] = $item;
    });
    fputcsv($output, $result);
}

在每次迭代中,它将创建一个类似于这样的数组:

[1111, 'Alcatel One Touch Idol 2', 'alcatel-one-touch-idol-2', 54, 42, ...]

0
foreach ($data as $line) {
    foreach($line as $array){
        foreach($array as $result){
            fputcsv($f,$result,",");
        }
    }
}

我知道这是一个老问题,但你也可以使用这个。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接