如何在PHP中将.csv文件解析为多维数组?

时间:2019-02-03 18:48:04

标签: php arrays csv multidimensional-array

我是PHP的新手,正在尝试制作与.csv文件进行通信的待办事项列表。到目前为止,我已经设法编写了一个将用户输入内容输入到csv文件中的函数,但是我一直坚持写一个可以解析(我什至不确定这是否正确)术语的函数。 .csv文件转换为多维数组,因此我可以方便地在PHTML文件中显示列表的每一行。

这是我到目前为止所拥有的:

`<?php
//
// ─── DATA ────────────────────────────────────────────────────────────────────
//

$user_entry = array(
    'title' => '',
    'description' => '',
    'date' => '',
    'priority' => ''
);

// puts the data the users entered into an array
$user_entry['title'] = $_POST['title'];
$user_entry['description'] = $_POST['description'];
$user_entry['date'] = $_POST['date'];
$user_entry['priority'] = $_POST['priority'];

//
// ─── FUNCTIONS ──────────────────────────────────────────────────────────────────
//

function writeInList() {
    //parses the $user_entry array into the .csv file
    global $user_entry;
    $file = fopen("todo.csv","a");
    fputcsv($file, $user_entry, ",");
    fclose($file);
}

function displayList() {
    //That's where I'm stuck.
    $file = fopen("todo.csv","r");
    $fileCountable = file("todo.csv");
    for ($i = 0; $i < count($fileCountable); $i++) {
        $csvContent = fgetcsv($file, 1000, ",");
        foreach ($csvContent as $value){
            $var[$i] = $value;
        }
        echo '<br>';
    }
    fclose($file);
}

//
// ─── MAIN CODE ─────────────────────────────────────────────────────────────
//

writeInList();

include 'todolist.phtml';`

对不起,如果之前已经讨论过。我进行了很多搜索,发现了类似的问题,但无法使其在我自己的代码中起作用。如果有人花时间查看我的代码,请多谢!

这也是我第一次在这里发帖,所以我希望我做得对。

1 个答案:

答案 0 :(得分:1)

你做得很好。您可以查看fgetcsv文档以了解更多信息。我将更改您的函数,以便它将参数作为输入(请尝试避免使用global

// insert data
function writeInList($user_entry, $path ) {
    $file = fopen($path ,"a");
    fputcsv($file, $user_entry, ",");
    fclose($file);
}

//extract data
function getList($path, $limit = 100000) {
    $file = fopen($path, "r");
    if (!$file) return null; // or throw error or print to log
    $allRows = []; //
    while (($data = fgetcsv($file, $limit, ",")) !== FALSE) {
        $allRows[] = $data; // as fgetcsv return array already exlode by "," 
    }
    fclose($file);
    return $allRows; 
}

现在,您从getList返回了2维数组。使用状态为getList("todo.csv"),并根据需要显示。

希望有帮助!