PHP 相当于 Perl 格式的函数

问题描述 投票:0回答:3

PHP 中是否有相当于 Perl 格式函数的函数?我有一个客户有一台老式的 Okidata 点阵打印机,并且需要一种好方法来用这个神秘的野兽来格式化收据和账单。

我记得在 Perl 中可以轻松地使用以下命令来完成此操作:

format BILLFORMAT = 
Name: @>>>>>>>>>>>>>>>>>>>>>>    Age: @###
      $name,                          $age
.
write;

任何想法将不胜感激,用这个把我的头撞在墙上。 O.o

更新:我无法在这个环境中安装Perl,否则我会直接使用Perl的格式化功能。

php perl format printing
3个回答
3
投票

您可以使用 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);

默认右对齐。


1
投票

如果您不介意使用 Perl 进程来控制打印机,您可以在 PHP 中序列化数据并将其传递给 Perl 脚本。

我非常幸运地使用 PHP::Serialization 来处理 Perl 和 PHP 之间的数据序列化和共享。您还可以使用 YAML 或 JSON 来完成此任务。


-2
投票

听起来是使用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]);
}
© www.soinside.com 2019 - 2024. All rights reserved.