Laravel Seeder中的PHP_EOL麻烦

时间:2019-03-03 19:32:02

标签: php windows laravel-5.7 laravel-seeding end-of-line

我尝试在Laravel 种子run()函数中运行以下几行。

$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 :(得分:3)

工作正常

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

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

PHP_EOL的目的是自动为平台选择正确的字符。对于DOS PHP_EOL-\r\n,mac-\r,Unix-\n。在当前情况下,您需要静态使用\n

答案 1 :(得分:0)

如果您使用的是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