PHP_EOL 问题 Laravel 播种机
PHP_EOL troubles in Laravel Seeder
我尝试 运行 Laravel seeder.
的 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()
函数会忽略行尾?
工作正常
$numbers = <<<EOL
1
2
3
4
EOL;
$array = explode("\n", $numbers)
PHP_EOL的目的是自动为平台选择正确的字符。对于 DOS PHP_EOL - \r\n
、mac - \r
、unix - \n
。在当前情况下,您需要静态使用 \n
.
如果您使用 Windows,您使用 Artisan 创建的文件(如播种机)具有 Unix 行结尾 (\n
) 而您的编辑器创建的文件可能有 DOS 行结尾 (\r\n
)。
在Windows上,PHP_EOL
的值是\r\n
,seeders的行尾是\n
,所以explode()
函数不会' t return 预期结果。
选项:
- 你可以使用
explode("\n", $numbers)
(使用双引号,而不是单引号)。
- 或者,使用
explode(PHP_EOL, $numbers)
并为特定文件编辑编辑器的行结束配置(下面的 Sublime Text 示例)。
我尝试 运行 Laravel seeder.
的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()
函数会忽略行尾?
工作正常
$numbers = <<<EOL
1
2
3
4
EOL;
$array = explode("\n", $numbers)
PHP_EOL的目的是自动为平台选择正确的字符。对于 DOS PHP_EOL - \r\n
、mac - \r
、unix - \n
。在当前情况下,您需要静态使用 \n
.
如果您使用 Windows,您使用 Artisan 创建的文件(如播种机)具有 Unix 行结尾 (\n
) 而您的编辑器创建的文件可能有 DOS 行结尾 (\r\n
)。
在Windows上,PHP_EOL
的值是\r\n
,seeders的行尾是\n
,所以explode()
函数不会' t return 预期结果。
选项:
- 你可以使用
explode("\n", $numbers)
(使用双引号,而不是单引号)。 - 或者,使用
explode(PHP_EOL, $numbers)
并为特定文件编辑编辑器的行结束配置(下面的 Sublime Text 示例)。