在PHP中使用sprintf时添加\n换行符号

ser*_*erg 10 php printf newline

我正在尝试将现有数据从MySQL数据库导出到我可以运行的ruby命令中rake db:seed.

这是我的代码.

# Generate db:seed data for proveedores.
$proveedores = R::findAll('tbproveedores');
$proveedoresE = R::exportAll($proveedores);

foreach ($proveedoresE as &$p) {

    $line = 'BookSupplier.create(company: "%s", city: "%s", country: "%s", address: "%s", telephone: "%s", contact: "%s", email: "%s", website: "%s"\n';
    $exportedLine = sprintf($line, $p['empresa'], $p['ciudad'], $p['pais'], $p['direccion'], $p['telefono'], $p['personacontacto'], $p['email'], $p['website']);
    var_dump($exportedLine);
    fwrite($seeds, $exportedLine);
    echo "<br />";
}
Run Code Online (Sandbox Code Playgroud)

注意\n$ line变量末尾的换行符号.我在网上看到这就是使用新行所需要的全部内容.

我上面代码的输出是(vertabim,一条长行):

BookSupplier.create(company: "Pearson", city: "Lima", country: "Peru", address: "Av. Limon", telephone: "4673535421", contact: "Javier", email: "", website: ""\nBookSupplier.create(company: "Project Management Institute - PMI", city: "Pennsylvania", country: "Estados Unidos", address: "Newtown Square, Pennsylvania", telephone: "1", contact: "Limberg Morales", email: "", website: "http://www.pmi.org/"\nBookSupplier.create(company: "UVirtual - Centro de Excelencia", city: "Santa Cruz", country: "Bolivia", address: "Av. Irala 585", telephone: "1", contact: "Limberg Morales", email: "", website: ""\nBookSupplier.create(company: "Ábaco de Rodolfo Depalma", city: "Buenos Aires", country: "Argentina", address: "Viamonte 1336, 4° (C1053 ACB) Buenos Aires", telephone: "5411-43711675", contact: "Limberg Morales", email: "", website: "http://www.abacoeditorial.com.ar/"\nBookSupplier.create(company: "Pablo Lledó - ProjectManagement", city: "Canadá", country: "Estados Unidos", address: "Victoria, BC, Canadá", telephone: "1", contact: "Limberg Morales", email: "", website: ""\n
Run Code Online (Sandbox Code Playgroud)

在我的新行插入之后,我希望每次调用都在它自己的行中.关于我做错的任何建议?

hek*_*mgl 29

\n只有在用引号括起来时才会解释换行符号:".像那样:

$line  = '...............';
$line .= "\n";
Run Code Online (Sandbox Code Playgroud)

您还应该知道PHP_EOL它是一个包含系统换行符分隔符的常量,它在几个操作系统上是不同的.例如,它将\n在Linux上,但\r\n在Windows上.最便携的代码看起来像:

$line  = '.....';
$line .= PHP_EOL;
Run Code Online (Sandbox Code Playgroud)


Jos*_*osh 12

如果您不能(或不想)切换到双引号,则可以使用ASCII代码插入换行符,如下所示:

> php
<?php printf('line one%cline two', 10);^D
line one
line two
>
Run Code Online (Sandbox Code Playgroud)

%c让你插入任何ASCII码,10是一个新行的代码.


Dan*_*inu 5

您需要使用双引号字符串,单引号字符串不会扩展特殊字符序列.有关PHP字符串的更多详细信息,请查看手册.