Laravel播种机中的PHP_EOL问题

问题描述 投票:1回答:2

我试图在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()功能会忽略线的末端?

php windows laravel-5.7 laravel-seeding end-of-line
2个回答
3
投票

工作良好

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

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

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


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

© www.soinside.com 2019 - 2024. All rights reserved.