Php 上载的CSV文件有4列,没有标题。需要创建数组并为每列指定一个特定的键值

Php 上载的CSV文件有4列,没有标题。需要创建数组并为每列指定一个特定的键值,php,arrays,csv,fgetcsv,Php,Arrays,Csv,Fgetcsv,在经过2个多小时的堆栈溢出查找解决方案后,我现在需要寻求指导。我的经验不足可能意味着我不知道如何“问”正确的问题,但我还没有找到任何类似于我正在寻找的工作 基本上,用户将提供一个CSV文件,该文件将上载到服务器端。它将始终是4列。它可能包括也可能不包括列标题。用户将标记(复选框)头是否存在。此标志将在我的PHP脚本中使用。如果存在标题,我需要忽略它(删除),因为我需要提供特定的键值,并且我无法控制用户在列标题中放置的内容。因此,无论哪种方式,我最终都会得到一个CSV文件,需要将其转换为一个数组,

在经过2个多小时的堆栈溢出查找解决方案后,我现在需要寻求指导。我的经验不足可能意味着我不知道如何“问”正确的问题,但我还没有找到任何类似于我正在寻找的工作

基本上,用户将提供一个CSV文件,该文件将上载到服务器端。它将始终是4列。它可能包括也可能不包括列标题。用户将标记(复选框)头是否存在。此标志将在我的PHP脚本中使用。如果存在标题,我需要忽略它(删除),因为我需要提供特定的键值,并且我无法控制用户在列标题中放置的内容。因此,无论哪种方式,我最终都会得到一个CSV文件,需要将其转换为一个数组,并为四列中的每一列指定键值

我在Stack Overflow中的所有搜索都只显示希望使用列标题的解决方案。在我的例子中,我需要忽略列标题(当它存在时),并提供特定的键值(例如,f_名称、l_名称、位置、位置区域)

到目前为止,我已成功打开并显示文件中的信息:

$file = fopen('filename', 'r');
while (($line = fgetcsv($file)) !== FALSE) {
  print_r($line);
}
我在堆栈溢出中发现了这个问题,它使用了一个标题并成功地将每个列标题作为键值放置:

function parse_csv_file($csvfile) { // SO #1269562
    $csv = Array();
    $rowcount = 0;
    if (($handle = fopen($csvfile, "r")) !== FALSE) {
        $max_line_length = defined('MAX_LINE_LENGTH') ? MAX_LINE_LENGTH : 10000;
        $header = fgetcsv($handle, $max_line_length);
        $header_colcount = count($header);
        while (($row = fgetcsv($handle, $max_line_length)) !== FALSE) {
            $row_colcount = count($row);
            if ($row_colcount == $header_colcount) {
                $entry = array_combine($header, $row);
                $csv[] = $entry;
            }
            else {
                error_log("csvreader: Invalid number of columns at line " . ($rowcount + 2) . " (row " . ($rowcount + 1) . "). Expected=$header_colcount Got=$row_colcount");
                return null;
            }
            $rowcount++;
        }
        //echo "Totally $rowcount rows found\n";
        fclose($handle);
    }
    else {
        error_log("csvreader: Could not read CSV \"$csvfile\"");
        return null;
    }
    return $csv;
}
尽管我在这两个代码示例中看到了正在做的事情,但我真的不知道最好的方法是什么: 1。删除CSV标题(如果存在);和 2.构建阵列时指定特定的键值

这就是我想要的结局:

从这个

Jamison,Cummings,Logistics Analyst,Logistics Operations
Bryce,Downey,Courier Specialist,Major Accounts
Rich,Lane,Supervisor,Receiving Scheduling
对此

[0] => Array
        (
            [f_name] => Jamison
            [l_name] => Cummings
            [position] => Logistics Analyst
            [position_area] => Logistics Operations
        )

    [1] => Array
        (
            [f_name] => Bryce
            [l_name] => Downey
            [position] => Courier Specialist
            [position_area] => Major Accounts
        )

    [2] => Array
        (
            [f_name] => Rich
            [l_name] => Lane
            [position] => Supervisor
            [position_area] => Receiving Scheduling
        )

如果您能提供任何指导,我将不胜感激。谢谢。

将所需的列标题作为数组放入
$header
中,而不是行
$header=fgetcsv($handle,$max_line_length)哇。那很容易“拍我的头”。我做了您建议的更改,添加了“$header=[f_name,l_name,position,position_area];”和。。。答对 了完美的结局。明亮的非常感谢。现在,如果有一个标题存在,你会建议数组移位($csv)作为一种删除的方式吗?