Проблемы с PHP_EOL в Laravel Seeder - PullRequest
0 голосов
/ 03 марта 2019

Я попытался запустить следующие строки внутри функции run() Laravel сеялка .

$numbers = <<<EOL
1
2
3
4
EOL;

$array = explode(PHP_EOL, $numbers);

После запуска php artisan migrate:refresh --seed я заметил, что значение $arrayбыло:

Array (
  0 => '1
2
3
4',
)

Ожидаемый результат был:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)

Почему функция explode() в сеялке игнорирует конец строк?

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Если вы используете Windows, файлы, которые вы создаете с помощью Artisan (например, сеялки) , имеют окончания строки Unix (\n), в то время как файлы, созданные вашим редактором, имеют DOSОкончание строки возможно (\r\n).

В Windows значение PHP_EOL равно \r\n, а окончания строк в сеялках \n, поэтому функция explode() не будет возвращать ожидаемый результат.

Опции:

  • Вы можете использовать explode("\n", $numbers) (используя двойные кавычки, а не одинарные кавычки).
  • Или, используйте explode(PHP_EOL, $numbers) и отредактируйте конечную конфигурацию строки вашего редактора дляконкретный файл (пример Sublime Text ниже).

enter image description here

0 голосов
/ 03 марта 2019

отлично работает

$numbers = <<<EOL
1
2
3
4
EOL;

$array = explode("\n", $numbers)

Цель PHP_EOL - автоматически выбрать правильный символ для платформы.Для DOS PHP_EOL - \r\n, mac - \r, unix - \n.В текущей ситуации вам нужно использовать статически \n.

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