循环到CSV文件并从标题PHP获取特定值

时间:2019-05-28 12:45:02

标签: php regex csv while-loop

我正在尝试导入CSV文件,以自动执行候选广告的插入。

第一步,用户导入一个excel文件(.xls,.xls)。从文件中,我将其转换为csv,以便更好地利用它,这要归功于PhpSpreadSheet库。

csv文件的示例: enter image description here

我只想恢复一些数据列,例如姓氏名字性别电话号码

为此,我使用正则表达式来检测它们。在每次检测中,我将结果存储在数组中。 但是之后,如何从这些列中恢复数据?

$headers = [];
if(($handle = fopen($loadedSheetName.'.csv', "r")) !== FALSE) 
{
    foreach (fgetcsv($handle, 1000, ';') as $key => $header) 
    {
        if (preg_match('/^(lastName)/i', $header, $matches)) 
        {
            $headers[$key] = $header;
        }

        if (preg_match('/^(firstName)/i', $header, $matches)) 
        {
            $headers[$key] = $header;
        }

        if (preg_match("/^(gender)/i", $header, $matches)) 
        {
            $headers[$key] = $header;
        }

        if (preg_match("/^(phoneNumber)/i", $header, $matches)) 
        {
            $headers[$key] = $header;
        }
    }

    $keys = array_keys($headers);
    $values = array_values($headers);

    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) 
    {    
        $num = count($data);

        for ($c=0; $c < $num; $c++) 
        {
            echo $data[$c] . "<br />\n";
        }
    }

    fclose($handle);
}

1 个答案:

答案 0 :(得分:0)

<?php
$headers = [];
$skip_headers = Array('lastname', 'firstname', 'gender', 'phonenumber');
if(($handle = fopen($loadedSheetName.'.csv', "r")) !== FALSE) 
{
    foreach (fgetcsv($handle, 1000, ';') as $key => $header) 
    {
        if (!in_array(strtolower($header), $skip_headers)) 
        {
            $headers[$key] = $header;
        }

    }


    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) 
    {    
       foreach ($headers as $key_ => $value)
       {
           echo $data[$key_] . "<br />\n";
       }
    }

    fclose($handle);
}