简体   繁体   English

将多维数组回显到csv

[英]echo multidimensional array to csv

I have json array like bellow: 我有像下面这样的json数组:

Array
(
    [total] => 1
    [rows] => Array
    (
        [0] => Array
            (
                [date] => 2014-11-12
                [A] => 1
                [B] => 2
                [C] => 2
                [D] => No
                [E] => New
                [F] => New
                [G] => 1
                [H] => 1
                [I] => 1
                [A] => 1
                [J] => 1
                [B] => 1
            )
        [1] => Array
            (
                [date] => 2014-12-12
                [A] => 1
                [B] => 1
                [C] => 2
                [D] => No
                [E] => New
                [F] => New
                [G] => 2
                [H] => 2
                [I] => 2
                [A] => 2
                [J] => 2
                [B] => 2
            )

    )

)

I want to echo like below: 我想像下面这样回声:

date      A B C D E F G H I A J B
2014-11-12  1 2 2 No  New New 1 1 1 1 1 1
2014-12-12  1 1 2 No  New New 2 2 2 2 2 2

how i do this thing what is the best way any suggestion. 我如何做这件事是什么建议的最好方法。

You can just use plain foreach in this case. 在这种情况下,您可以只使用普通的foreach。 As for the headers, you may need to use array_keys() for them. 至于标题,您可能需要对它们使用array_keys() Example: 例:

<?php

$array = [ 'total' => 1, 'rows' => [ [ 'date' => '2014-11-12', 'A' => '1', 'B' => '2', 'C' => '2', 'D' => 'No', 'E' => 'New', 'F' => 'New', 'G' => '1', 'H' => '1', 'I' => '1', 'A' => '1', 'J' => '1', 'B' => '1', ], [ 'date' => '2014-12-12', 'A' => '1', 'B' => '1', 'C' => '2', 'D' => 'No', 'E' => 'New', 'F' => 'New', 'G' => '2', 'H' => '2', 'I' => '2', 'A' => '2', 'J' => '2', 'B' => '2', ], ],];
$keys = array_keys(reset($array['rows']));

?>

<table cellpadding="10">
    <thead>
    <tr align="left">
        <?php foreach($keys as $header): ?>
            <th><?php echo $header; ?></th>
        <?php endforeach; ?>
    </tr>
    </thead>
    <tbody>
    <?php foreach($array['rows'] as $row): ?>
        <tr><?php foreach ($row as $value): ?>
            <td><?php echo $value; ?></td>
        <?php endforeach; ?></tr>
    <?php endforeach; ?>
    </tbody>
</table>

Sample Output 样本输出

Printing in CSV: 以CSV打印:

$array = [ 'total' => 1, 'rows' => [ [ 'date' => '2014-11-12', 'A' => '1', 'B' => '2', 'C' => '2', 'D' => 'No', 'E' => 'New', 'F' => 'New', 'G' => '1', 'H' => '1', 'I' => '1', 'A' => '1', 'J' => '1', 'B' => '1', ], [ 'date' => '2014-12-12', 'A' => '1', 'B' => '1', 'C' => '2', 'D' => 'No', 'E' => 'New', 'F' => 'New', 'G' => '2', 'H' => '2', 'I' => '2', 'A' => '2', 'J' => '2', 'B' => '2', ], ],];
$data[] = array_keys(reset($array['rows'])); // push header inside
$data = array_merge($data, $array['rows']); // push values inside

$file = fopen('whatevertname.csv', 'w+');
foreach ($data as $value) {
    fputcsv($file, $value);
}
fclose($file);

Assuming you are writting csv files using fputcsv() function, 假设您正在使用fputcsv()函数编写 csv文件,

  1. You should first get all array keys using array_keys() . 您应该首先使用array_keys()获得所有数组键。 You can get it from the first data row and insert it to a new array (let's name it 'csv_array'). 您可以从第一个数据行中获取它,并将其插入到新数组中(让我们将其命名为“ csv_array”)。
  2. You should now have new array with the first data is array of field. 现在,您应该具有新数组,第一个数据是字段数组。
  3. Then, you should loop all of your data and add it to 'csv_array'. 然后,您应该循环所有数据并将其添加到“ csv_array”。
  4. Write it via fputcsv() function. 通过fputcsv()函数编写它。

your generated 'csv_array' structure should be look like this, after you insert first row data, before using fputcsv() 在插入第一行数据之后,在使用fputcsv()之前,生成的“ csv_array”结构应如下所示

Array
    (
        [0] => Array
            (
                [0] => date
                [1] => A
                [2] => B
                [3] => C
                [4] => D
                [5] => E
                [6] => F
                [7] => G
                [8] => H
                [9] => I
                [10] => A
                [11] => J
                [12] => B
            )
        [1] => Array
            (
                [0] => 2014-12-12
                [1] => 1
                [2] => 2
                [3] => 2
                [4] => No
                [5] => New
                [6] => New
                [7] => 1
                [8] => 1
                [9] => 1
                [10] => 1
                [11] => 1
                [12] => 1
            )

    )

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM