7

大家好,只是想问我如何将关联数组放入 csv 中?例如,如果我有一个这样的数组。

Array
(
    [0] => Array
        (
            [restaurant_id] => 1227
            [new_lat] => 13.62241
            [new_long] => 123.19341
            [date_updated] => 2013-11-14 11:20:26
        )

    [1] => Array
        (
            [restaurant_id] => 1218
            [new_lat] => 14.66732
            [new_long] => 121.02618
            [date_updated] => 2013-11-14 11:22:22
        )
)

对于我生成 csv 的代码是这样的:

            $restaurant_id = $post_data['company_id'];
            $new_lat_entry = $post_data['new_lat'];
            $new_long_entry = $post_data['new_long'];

            $data_add =  array(
                'restaurant_id' => $restaurant_id,
                'new_lat' => $new_lat_entry,
                'new_long' => $new_long_entry,
                'date_updated' => date('Y-m-d H:i:s')
            );

            $data = unserialize(file_get_contents('addresses.txt'));
            $data[] = $data_add;

            $serialize_data = serialize($data);
            file_put_contents("addresses.txt", $serialize_data, LOCK_EX); //write the text file

            $array = unserialize(file_get_contents('addresses.txt')); //THIS WILL GET THE ARRAY
                    echo "<pre>";
            print_r($array); //display it

            $csv = '';
            foreach($array as $row) {
                $csv .= implode(',', $row) . "\n";
            }


            //fn_print_die($csv);


            $file_input = fopen("addresses.csv","w");
            foreach($csv as $line){
                fputcsv($file_input,split(',',$line));
            }
            fclose($file_input);
4

4 回答 4

11

这应该工作...

 <?php

  foreach ($array as $row) {
       fputcsv($file_input, $row);
 }

 fclose($file_input);

  ?>

只需参考 php.net 上的 fputcsv 手册

于 2013-11-14T03:48:57.873 回答
4

您应该尽可能尝试实现SPL 类

$csv_file = new SplFileObject('addresses.csv', 'w');

foreach ($address_list as $address_fields) {
    $csv_file->fputcsv($address_fields);
}
于 2013-11-14T04:12:08.163 回答
3

你可以使用implode很容易地做这样的事情

$csv = '';
foreach($array as $row) {
    $csv .= implode(',', $row) . "\n";
}
于 2013-11-14T03:37:50.450 回答
2

为了使这个干净,你必须

  1. 从数组中收集所有键(foreach 两次)
  2. 为每个餐厅构建第二个数组(无子节点)
  3. 将键数组合并到该数组中,然后
  4. 将所有餐厅子节点合并到这些键。

原因很简单:餐厅A具有“[self_service] => true” 餐厅B的 CSV 行要么错过一列,要么更糟,改为具有“[vegetarian_food] => false”。

最后,您将在同一列中的“真”和“假”彼此下,其中第一个意思是“是的,自助服务”,第二个意思是“对不起蔬菜”。您可能永远不会注意到,因为它们可能仍然具有相同的计数(数组)。

(我会写这个作为评论,但我的 Stack Exchange 声誉还不允许我这样做(现在 48 个,还有 2 个,耶!)

于 2016-12-29T13:02:26.207 回答