PHP:将csv中的行存储到数组中

时间:2018-10-30 18:12:38

标签: php arrays excel file csv

CSV文件看起来像这样:

user_id, fname, lname, country
001, cake, chocolate, US
002, ice cream, vanilla, US
003, pie, pumpkin, US

我想将它们分别保存到一个数组中,例如:

Array ( [0] => Array ( [0] => user_id [1] => fname [2] => lname [3] => country)
        [1] => Array ( [0] => 001 [1] => cake [2] => chocolate [3] => US)
        [2] => Array ( [0] => 002 [1] => ice cream [2] => vanilla [3] => US)
        [3] => Array ( [0] => 003 [1] => pie [2] => pumpkin [3] => US) 
) 

当前,我的代码如下所示,但是只保存了最后一个元素:

$file = fopen('csvexample.csv', 'r');
$i = 0;
while (($line = fgetcsv($file)) !== FALSE) {
    //$line is an array of the csv elements
    $arr = array($i => $line);
    $i++;
}
fclose($file);
print_r($arr);

请帮助!不确定我缺少什么

3 个答案:

答案 0 :(得分:1)

str_getcsv

$arr = array_map('str_getcsv', file('csvexample.csv'));

答案 1 :(得分:0)

像这样简单地添加到您的数组

$file = fopen('csvexample.csv', 'r');
$arr = [];  // init the array just for completness

while (($line = fgetcsv($file)) !== FALSE) {
    $arr[] = $line;
}
fclose($file);
print_r($arr);

答案 2 :(得分:-1)

尽管这不是您要求的,但我相信关联数组更合适。 (除非您有理由使用上述数组格式)。

我将这些行炸开,并使用第一行作为键,以后再使用array_combine使其成为关联数组。

TABLE_NAME$YYYYMMDD

输出:

printf("Tell me your age or brith day\n");

if(scanf("%d", &age)!=1){
printf("error");

}
else if(scanf("%d %d %d", &day,&month,&year)!=3){
printf("error");

https://3v4l.org/354iT


也许更好的办法是使主数组键成为用户ID,如本例所示:https://3v4l.org/hMLil