【问题标题】:get matched columns data from csv从 csv 获取匹配的列数据
【发布时间】:2019-11-21 11:06:24
【问题描述】:

我想从 laravel 中的 csv 中获取选定的标头数据

我的csv是这样的

所以如果 csv 标头在下面的数组中

$Headers=['FIRSTNAME', 'LASTNAME'];

,然后在 csv 中提取/更新他们的数据

我尝试过类似的代码

$file_n = Storage::path('100Contacts.csv');
$file = fopen($file_n, "r");
$all_data = array();

$i=0;
while (($data = fgetcsv($file, 200, ",")) !== FALSE) 
{
    if($i == 0) //headers
    { 
        for($j = 0; $j < count($data); $j++)
        {
            if (in_array($data[$j], $Headers)) 
            {
                //means header is array
                //?? how to get data based on matching column 
            }
        }
    }

    $i++;
}

我也试图在单独的数组中提取数据,但在那之后

$all_data[$i]['Prefix'] = $data[0];
$all_data[$i]['FIRSTNAME'] = $data[1];
$i++;

$name = $data[0];
$city = $data[1];
$all_data = $name." ".$city;
array_push($all_data, $arr);

请推荐

【问题讨论】:

    标签: php arrays laravel csv


    【解决方案1】:

    此代码首先读取标题的行,然后查找要匹配的列....

    $file = fopen($file_n, "r");
    $all_data = array();
    
    $fileHeaders = fgetcsv($file);
    $headers=['FIRSTNAME', 'LASTNAME'];
    $columns = array_flip(array_intersect($fileHeaders, $headers));
    

    此时$columns包含

    Array
    (
        [FIRSTNAME] => 1
        [LASTNAME] => 2
    )
    

    与第 2 列和第 3 列相关(基于 0)。

    然后它读取每一行并检查数据中的列与要更新的记录,如果匹配它只是替换数据(您可能需要根据需要更改它)并覆盖读取的数据。如果不匹配,它只会复制数据...

    // Data to be matched and updated
    $update = ["Name prefix" => "Mr.", "FIRSTNAME" => "Antonio", 
            "LASTNAME" => "Joy", "Gender" => "M", "EMAIL" => "ccc"];
    while (($data = fgetcsv($file, 200, ",")) !== FALSE)
    {
        if ( $data[$columns["FIRSTNAME"]] == $update["FIRSTNAME"] &&
                $data[$columns["LASTNAME"]] == $update["LASTNAME"])      {
            $data = array_values($update);   
        }
        $all_data[] = $data;
    }
    

    【讨论】:

    • 这有帮助吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 2020-10-18
    相关资源
    最近更新 更多