PHP 中是否有相当于 Perl 格式函数的函数?我有一个客户有一台老式的 Okidata 点阵打印机,并且需要一种好方法来用这个神秘的野兽来格式化收据和账单。
我记得在 Perl 中可以轻松地使用以下命令来完成此操作:
format BILLFORMAT =
Name: @>>>>>>>>>>>>>>>>>>>>>> Age: @###
$name, $age
.
write;
任何想法将不胜感激,用这个把我的头撞在墙上。 O.o
更新:我无法在这个环境中安装Perl,否则我会直接使用Perl的格式化功能。
您可以使用 printf 来做类似的事情。
http://www.php.net/manual/en/function.printf.php
printf("Name: %21s Age: %3i\n",$name,$age);
如果您希望名称左对齐,只需添加 -
printf("Name: %-21s Age: %3i\n",$name,$age);
默认右对齐。
如果您不介意使用 Perl 进程来控制打印机,您可以在 PHP 中序列化数据并将其传递给 Perl 脚本。
我非常幸运地使用 PHP::Serialization 来处理 Perl 和 PHP 之间的数据序列化和共享。您还可以使用 YAML 或 JSON 来完成此任务。
听起来是使用heredoc的完美情况:
#!/usr/bin/env php
<?php
const DB = [
'Anne Brown' => [51, '2417 Joseph Pike, Branchstad, MS 71701'],
'Heather Hoover' => [53, '161 Smith Inlet Medinabury, WA 63029'],
'Mario Keith' => [36, '303 Mcgrath Grove, Hunterberg, MH 80228'],
];
/* assuming you are trying to replicate
Name: @>>>>>>>>>>>>>>>>>>>>>> Age: @###
$name, $age
Address: @*
$address
.
*/
const format = <<<EOF
Name: %23s Age: %4d
Address: %s
EOF;
foreach (DB as $name => $details) {
printf(format, $name, $details[0], $details[1]);
}