Добавление символа n новой строки при использовании sprintf в PHP
Я пытаюсь экспортировать существующие данные из базы данных 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 />";
}
уведомления n
символ новой строки в конце переменной $line. Я читал в интернете, что это все, что нужно для использования новой строки.
вывод моего кода выше (фертовым, длинная линия):
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
Я хотел бы, чтобы каждый вызов был в своей собственной линии, следуя моей новой линии вставка. Есть предложения, что я делаю не так?
6 ответов
символ новой строки \n
будет интерпретироваться только тогда, когда он заключен в двойной цитаты: "
. Вот так:
$line = '...............';
$line .= "\n";
вы также должны знать о!--4--> это константа, которая содержит системный разделитель новой строки, который отличается в нескольких операционных системах. Например, это будет \n
в Linux, но \r\n
на Windows. Самый портативный код будет выглядеть так:
$line = '.....';
$line .= PHP_EOL;
Если вы не можете (или не хотите) переключиться на двойные кавычки, вы можете вставить новую строку, используя ASCII-код, например:
> php
<?php printf('line one%cline two', 10);^D
line one
line two
>
на %c
позволяет вставлять любой код ASCII, а 10-код новой строки.
вам нужно использовать строки с двойными кавычками, одинарные кавычки не расширяют специальные последовательности символов. Проверьте руководство для получения более подробной информации о строках PHP.
специальные символы в строках работают только тогда, когда они заключены в двойные кавычки ("). Вижу PHP string documentation для получения дополнительной информации.
поэтому либо используйте двойные кавычки, что является большой работой, так как вы используете довольно много двойных кавычек в своей строке. И избежать всех двойных кавычек внутри строки.
или если вы ленивы, добавить новую строку после:
$line = '...';
$line .= "\n";
следуя ответу Джоша, вы можете ввести новую строку из интерполированной строки в printf, используя %s printf('something%s', "\n")
что начинает иметь больше смысла в более сложном примере-Например, если шаблон строки хранится в переменной языка, или вы делаете несколько замен, или просто должны придерживаться sprintf, потому что ваш PHB санкционирует его.
в вашем случае это будет
$line = 'BookSupplier.create(company: "%s", city: "%s", country: "%s", address: "%s", telephone: "%s", contact: "%s", email: "%s", website: "%s"%s';
$exportedLine = sprintf($line, $p['empresa'], $p['ciudad'], $p['pais'], $p['direccion'], $p['telefono'], $p['personacontacto'], $p['email'], $p['website'], "\n");
я отформатировал блок заголовка электронной почты таким образом:
$headers = sprintf(
'From: %1$s%2$sReply-To: %1$s%2$sMIME-Version: 1.0%2$sContent-type: text/html; charset=iso-8859-1%2$s'
, $EMAIL_FROM, "\r\n");
повторение использования \r\n
С помощью 1$
синтаксис индекс параметра.
так %2$s
становится \r\n
, не занимая никаких дополнительных символов, но труднее читать!
$line = "BookSupplier.create(company: '%s', city: '%s', country: '%s', address: '%s', telephone: '%s', contact: '%s', email: '%s', website: '%s'\n";
двойные кавычки являются обязательными для \n(или любой другой whitescpace Чара, такие как \T) для работы.