Есть ли функция PHP для преобразования CSV в объект PHP? - PullRequest
0 голосов
/ 05 июля 2019

Я некоторое время искал функцию в PHP, которая конвертирует CSV в объект PHP, похожий на fetchObject в PDO.

Есть что-нибудь в этом направлении, или мне нужно построитьмагия сама действует?

Я пробовал магические функции.

1 Ответ

1 голос
/ 06 июля 2019

Из комментария Qirel вы можете получить один объект со свойством для каждой строки в виде массива.Это не будет похоже на строки базы данных, извлекаемые с помощью API, и будет неудобным для доступа с целочисленными свойствами:

$result = (object)array_map('str_getcsv', file('file.csv'));

Чтобы получить формат массива объектов, таких как PDO fetchObject, вам потребуетсяЭто необходимо, но все же каждый объект будет иметь целочисленные свойства (вероятно, не то, что вам нужно):

$result = array_map(function($v) { return (object)str_getcsv($v); }, file('file.csv'));

Чтобы сделать это, как обычно, с функциями базы данных, которые извлекают строку (но все же целочисленные свойства):

if($fh = fopen('file.csv', 'r')) {
    while($row = fgetcsv($fh)) {
        $result[] = (object)$row;
    }
}

Лучше было бы выбрать первую строку, если у нее есть имена / заголовки столбцов, и объединить ее с данными перед приведением к объекту:

if($fh = fopen('file.csv', 'r')) {
    $col = fgetcsv($fh);

    while($row = fgetcsv($fh)) {
        $result[] = (object)array_combine($col, $row);
    }
}

с array_map:

$rows = file('file.csv');
$cols = str_getcsv(array_shift($rows));
$result = array_map(function($v) use($cols) {
                        return (object)array_combine($cols, str_getcsv($v));
                    }, $rows);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...