Php 函数读取CSV标题并根据列包含的内容创建数组
在php中,我试图找到一种方法来编写一个函数,读取CSV文件的所有头/第一行,并根据头的内容创建数组。对不起,这听起来很混乱。基本上,当用户上传CSV文件时,我希望确保它将转换为我设置的数组。每个CSV都可能不同,因此我想找到一种方法来查找“说明””列,并将其移动到与我的“预设数组”匹配的位置,然后导入每一行 我很难解释,我会试着在下面写一些东西 我希望订单是“日期、类型、说明”。 假设一个用户上传了一个CSV,它有“类型、描述、日期”Php 函数读取CSV标题并根据列包含的内容创建数组,php,Php,在php中,我试图找到一种方法来编写一个函数,读取CSV文件的所有头/第一行,并根据头的内容创建数组。对不起,这听起来很混乱。基本上,当用户上传CSV文件时,我希望确保它将转换为我设置的数组。每个CSV都可能不同,因此我想找到一种方法来查找“说明””列,并将其移动到与我的“预设数组”匹配的位置,然后导入每一行 我很难解释,我会试着在下面写一些东西 我希望订单是“日期、类型、说明”。 假设一个用户上传了一个CSV,它有“类型、描述、日期” 我想创建一个函数,对它们进行重新排序,这样,如果CSV数据
我想创建一个函数,对它们进行重新排序,这样,如果CSV数据的布局不同,那么它将正确地对标题和行进行重新排序。键搜索功能将返回标题的位置。您可以改用
array\u search
。我只是做了一个函数,以防标题有额外的空格。如果希望使搜索不区分大小写,请随意修改它。只需确保编码是utf-8
$file = fopen('/path/to/file.csv', 'r');
$row = fgetcsv($file);
$dateIndex = key_search("Date", $row);
$typeIndex = key_search("Type",$row);
$descIndex = key_search("Description", $row);
$sortedArray = [];
while(($row = fgetcsv($file)) !== false){
$sortedArray[] = [
'Date' => $row[$dateIndex],
'Type' => $row[$typeIndex],
'Description' => $row[$descIndex]
];
}
function key_search($field_name, $fields){
foreach($fields as $key => $value){
if(trim($value) == $field_name){
return $key;
}
}
}
key\u search
功能将返回标题的位置。您可以改用array\u search
。我只是做了一个函数,以防标题有额外的空格。如果希望使搜索不区分大小写,请随意修改它。只需确保编码是utf-8
$file = fopen('/path/to/file.csv', 'r');
$row = fgetcsv($file);
$dateIndex = key_search("Date", $row);
$typeIndex = key_search("Type",$row);
$descIndex = key_search("Description", $row);
$sortedArray = [];
while(($row = fgetcsv($file)) !== false){
$sortedArray[] = [
'Date' => $row[$dateIndex],
'Type' => $row[$typeIndex],
'Description' => $row[$descIndex]
];
}
function key_search($field_name, $fields){
foreach($fields as $key => $value){
if(trim($value) == $field_name){
return $key;
}
}
}
第一次调用
fgetcsv()
将给出第一行。第一次调用fgetcsv()
将给出第一行。这看起来不错,但我不确定如何显示标题下的行。假设第2行是'01/10/2019,123,说明1',第3行是'02/10/2019,345,说明2',依此类推。怎样才能正确地排序呢?谢谢,非常感谢。它是在while
循环中迭代时排序的。在这种情况下,输入$sortedArray
。每一行都使用整数键进行索引,因此技巧是获取标题的索引,并使用它们确定其余行的值的位置@GaryBHmm,我可以呼出键,但里面似乎没有任何值。SorterDarray的打印方式如下[0]=>数组([Date]=>[Type]=>[Description]=>)[1]=>数组([Date]=>[Type]=>[Description]=>)[2]=>数组([Date]=>[Type]=>[说明]=>)[3]=>数组([日期]=>[类型]=>[说明]=>)你在@GaryB有什么错误吗?嗯,这很奇怪。我刚刚测试了这个,唯一的区别是我的文件是另一种编码,所以我先转换了它。奇怪的是,我刚刚创建了一个新的CSV来测试,在SorterDarray中仍然是空的,[Date]=>[Type]=>[Description]=>,可能我做错了什么?这看起来很好,但我不确定如何显示标题下的行。假设第2行是'01/10/2019,123,说明1',第3行是'02/10/2019,345,说明2'等等。如何正确排序?谢谢,非常感谢。它是在lo中迭代时排序的操作。在本例中,输入到$sortedArray
。每一行都用整数键索引,所以技巧是获取标题的索引,并使用它们确定其余行的值的位置。@GaryBHmm,我可以回显键,但里面似乎没有存储任何值。sortedArray像这样打印出来[0]=>数组([Date]=>[Type]=>[Description]=>)[1]=>数组([Date]=>[Type]=>[Description]=>)[2]=>数组([Date]=>[Type]=>[Description]=>)[3]=>数组([Date]=>[Type]=>[Description]=>)你在@GaryB有什么错误吗?嗯,这很奇怪。我刚刚测试了这个,唯一的区别是我的文件是另一种编码,所以我先转换了它。奇怪不是吗,我刚刚创建了一个新的CSV来测试,在SorterDarray中仍然是空白的,[日期]=>[输入]=>[描述]=>,也许我做错了什么?