Неопределенный индекс: идентификатор, непредвиденное поведение - PullRequest
1 голос
/ 26 июня 2019

Я возлюсь с CSV-файлами внутри консольной команды для laravel. Я знаю, что есть библиотеки для импорта CSV-файлов, однако я столкнулся со странной неопределенной ошибкой индекса, которая, я надеюсь, может иметь больше информации. Без этой колонки я могу достичь того, что мне нужно, но мне любопытно, почему эта ошибка происходит.

public function handle()
    {
        $file = Storage::disk('local')->get('upload.csv');

        $lines = explode("\r\n", $file);

        $keys = [];

        foreach ($lines as $key => $line)
        {

            $outputLine = [];

            if($key == 0)
            {
                // Get header columns
                $keys = str_getcsv($line); continue;
            }

            // Get row contents
            $items = str_getcsv($line);

            foreach ($items as $k => $item)
            {
                // Rename keys to match headers
                $outputLine[$keys[$k]] = $item;
            }
                // try to access $outputLine['id']
                // error: Undefined Index: id

            $csv[$key] = $outputLine;
        }

    }

Однако вывод $csv[$key] ясно показывает ключ ['id'] для всех записей в csv. Попытка доступа здесь также вызывает ту же проблему. Доступ к любому другому произвольному ключу в массиве работает нормально. Это всегда первый ключ, независимо от имени.

ОБНОВЛЕНИЕ: Предоставление примера импорта CSV

id,name,email,membership_id
1,John,John@example.com,1
2,Jane,Jane@example.com,2
3,Brian,Brian@example.com,3

ОБНОВЛЕНИЕ 2: Предоставление дампа из $ items

array:4 [
  0 => "1"
  1 => "John"
  2 => "john@example.com"
  3 => "1"
]
array:4 [
  0 => "2"
  1 => "Jane"
  2 => "jane@example.com"
  3 => "2"
]
array:4 [
  0 => "3"
  1 => "Brian"
  2 => "brian@example.com"
  3 => "3"
]
array:4 [
  0 => "4"
  1 => "Adam"
  2 => "adam@example.com"
  3 => "4"
]
array:4 [
  0 => "5"
  1 => "Frank"
  2 => "frank@example.com"
  3 => "5"
]
array:4 [
  0 => "6"
  1 => "Phil"
  2 => "phil@example.com"
  3 => "6"
]

DUMP OF $outputLine

array:4 [
  "id" => "1"
  "name" => "John"
  "email" => "john@example.com"
  "membership_id" => "1"
]
array:4 [
  "id" => "2"
  "name" => "Jane"
  "email" => "jane@example.com"
  "membership_id" => "2"
]
array:4 [
  "id" => "3"
  "name" => "Brian"
  "email" => "brian@example.com"
  "membership_id" => "3"
]
array:4 [
  "id" => "4"
  "name" => "Adam"
  "email" => "adam@example.com"
  "membership_id" => "4"
]
array:4 [
  "id" => "5"
  "name" => "Frank"
  "email" => "frank@example.com"
  "membership_id" => "5"
]
array:4 [
  "id" => "6"
  "name" => "Phil"
  "email" => "phil@example.com"
  "membership_id" => "6"
]

1 Ответ

0 голосов
/ 26 июня 2019

Я не думаю, что вы использовали разделитель по умолчанию , в CSV

https://www.php.net/manual/en/function.str-getcsv.php

Попробуйте установить правильный в зависимости от того, что у вас есть во входном файле

str_getcsv($line, ';') // example with ';' delimiter
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...