Как разобрать файл .csv в многомерный массив в PHP? - PullRequest
0 голосов
/ 03 февраля 2019

Я новичок в 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';`

I 'Мне жаль, если это обсуждалось ранее.Я много искал и нашел похожие вопросы, но не могу заставить его работать в своем собственном коде.Большое спасибо заранее, если кто-нибудь найдет время, чтобы взглянуть на мой код!

Это также мой первый пост, поэтому я надеюсь, что я делаю это правильно.

1 Ответ

0 голосов
/ 03 февраля 2019

Ты неплохо справился.Вы можете посмотреть документацию 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; 
}

Теперь у вас есть 2-Dim массив, возвращаемый из getList.Используйте как getList("todo.csv") и отображайте как вам угодно.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...