Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 函数读取CSV标题并根据列包含的内容创建数组_Php - Fatal编程技术网

Php 函数读取CSV标题并根据列包含的内容创建数组

Php 函数读取CSV标题并根据列包含的内容创建数组,php,Php,在php中,我试图找到一种方法来编写一个函数,读取CSV文件的所有头/第一行,并根据头的内容创建数组。对不起,这听起来很混乱。基本上,当用户上传CSV文件时,我希望确保它将转换为我设置的数组。每个CSV都可能不同,因此我想找到一种方法来查找“说明””列,并将其移动到与我的“预设数组”匹配的位置,然后导入每一行 我很难解释,我会试着在下面写一些东西 我希望订单是“日期、类型、说明”。 假设一个用户上传了一个CSV,它有“类型、描述、日期” 我想创建一个函数,对它们进行重新排序,这样,如果CSV数据

在php中,我试图找到一种方法来编写一个函数,读取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中仍然是空白的,[日期]=>[输入]=>[描述]=>,也许我做错了什么?