【问题标题】:Create php array with key value pair for an csv file为 csv 文件创建带有键值对的 php 数组
【发布时间】:2013-06-20 10:28:26
【问题描述】:

我在控制器操作中导入了一个 csv 文件。 csv文件的结构如下所示。

Name , Phone , address
user1 , 99887766 , xyz 
user2, 99885566 , hjj 

现在我想要以 csv 标头信息作为键和行数据作为值的数组数组。所需的输出应该是这样的。

[
"0" => [ "Name" => "user1" , "Phone" => "99887766" , "address" => "xyz" ],
"1" => [ "Name" => "user2" , "Phone" => "99885566" , "address" => "hjj" ],
]

我能够使用 php explode 获取行数据。问题在于将密钥设置为给定的标题。 任何人都可以帮我解决这个问题。

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    爆炸可能很危险 - 如果任何地址中有逗号,则该行将变为无效。我建议改用原生函数str_getcsv()

    Here is an example 为 csv 创建关联数组的通用解决方案。下面是函数的副本。

    function csv_to_array($filename='', $delimiter=',')
    {
        if(!file_exists($filename) || !is_readable($filename))
            return FALSE;
    
        $header = NULL;
        $data = array();
        if (($handle = fopen($filename, 'r')) !== FALSE)
        {
            while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE)
            {
                if(!$header)
                    $header = $row;
                else
                    $data[] = array_combine($header, $row);
            }
            fclose($handle);
        }
        return $data;
    }
    

    【讨论】:

      【解决方案2】:

      你可以试试下面的代码

       $rows = file($csv_data_file);
       $header = array_shift($rows); //get the header out
       $header = explode(",", $header);
       $final_array = array();
       foreach ($rows as $row) {
            $row = explode(",", $row);
            $final_array[] = array($header[0] => $row[0], $header[1] => $row[1], $header[2] => $row[2]);
       }
      

      【讨论】:

        猜你喜欢
        • 2021-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多