Php 上载的CSV文件有4列,没有标题。需要创建数组并为每列指定一个特定的键值
在经过2个多小时的堆栈溢出查找解决方案后,我现在需要寻求指导。我的经验不足可能意味着我不知道如何“问”正确的问题,但我还没有找到任何类似于我正在寻找的工作 基本上,用户将提供一个CSV文件,该文件将上载到服务器端。它将始终是4列。它可能包括也可能不包括列标题。用户将标记(复选框)头是否存在。此标志将在我的PHP脚本中使用。如果存在标题,我需要忽略它(删除),因为我需要提供特定的键值,并且我无法控制用户在列标题中放置的内容。因此,无论哪种方式,我最终都会得到一个CSV文件,需要将其转换为一个数组,并为四列中的每一列指定键值 我在Stack Overflow中的所有搜索都只显示希望使用列标题的解决方案。在我的例子中,我需要忽略列标题(当它存在时),并提供特定的键值(例如,f_名称、l_名称、位置、位置区域) 到目前为止,我已成功打开并显示文件中的信息:Php 上载的CSV文件有4列,没有标题。需要创建数组并为每列指定一个特定的键值,php,arrays,csv,fgetcsv,Php,Arrays,Csv,Fgetcsv,在经过2个多小时的堆栈溢出查找解决方案后,我现在需要寻求指导。我的经验不足可能意味着我不知道如何“问”正确的问题,但我还没有找到任何类似于我正在寻找的工作 基本上,用户将提供一个CSV文件,该文件将上载到服务器端。它将始终是4列。它可能包括也可能不包括列标题。用户将标记(复选框)头是否存在。此标志将在我的PHP脚本中使用。如果存在标题,我需要忽略它(删除),因为我需要提供特定的键值,并且我无法控制用户在列标题中放置的内容。因此,无论哪种方式,我最终都会得到一个CSV文件,需要将其转换为一个数组,
$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)作为一种删除的方式吗?