使用 fputcsv 从多维数组创建 CSV

Posted

技术标签:

【中文标题】使用 fputcsv 从多维数组创建 CSV【英文标题】:Create CSV from multidimensional array with fputcsv 【发布时间】:2015-04-04 01:20:38 【问题描述】:

我正在尝试将多维数组放入 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 意味着将保留数组的结构(不会展平)并且更容易重新创建数据 【参考方案1】:

我建议先展平每个数组:

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, ...]

【讨论】:

【参考方案2】:
foreach ($data as $line) 
    foreach($line as $array)
        foreach($array as $result)
            fputcsv($f,$result,",");
        
    

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

【讨论】:

以上是关于使用 fputcsv 从多维数组创建 CSV的主要内容,如果未能解决你的问题,请参考以下文章

从php中的多维数组中删除重复值

在 laravel 中导出 excel 或 csv 中的多维数组

如何从多维数组开始使用 DOM 创建表?

取消设置多维数组中的数据

如何在 PHP 中对多维数组进行排序 [重复]

使用组节点从多维子数组创建字符串