在 PHP 中打印带有正确 (+/-) 符号的数字序列

Posted

技术标签:

【中文标题】在 PHP 中打印带有正确 (+/-) 符号的数字序列【英文标题】:Print a sequence of numbers in PHP with the correct (+/-) sign 【发布时间】:2018-07-11 05:50:26 【问题描述】:

我需要按顺序打印一些数字,它们之间有 + 和 - 。但是,我事先不知道哪个数字是正数,哪个是负数。目前,我这样回应他们:

echo "$a + $b + $c + $d + $e + $f";

假设$a$f 的值都是正数。我会得到类似的东西:5 + 10 + 12 + 18 + 9 + 7

但是,如果某些值是负数,我会得到类似5 + -10 + 12 + -18 + 9 + - 7 的信息。在这种情况下,理想的输出应该是5 - 10 + 12 - 18 + 9 - 7

请不要说我不想计算加法或减法的最终结果。我只想用正确的符号把它全部打印在网页上。

我可以通过编写 6 个嵌套的 if() 块来做到这一点,但这似乎需要做很多工作,而且每次都这样做很容易出错。有什么聪明的办法可以输出正确的符号。

【问题讨论】:

如果第一个数字是负数应该是什么样子? 【参考方案1】:

最简单的方法是更正最终字符串中的运算符外观:

$s = '5 + -10 + 12 + -18 + 9 + - 7'; // result of interpolation or concatenation
$s = str_replace('+ -', '- ', $s);
// => "5 - 10 + 12 - 18 + 9 -  7"

如果这对你来说是可能的,这将是尽可能快的——没有循环(在 php 中),没有条件一次处理每个数字。如果您仍然循环,我会推荐@Phils 建议与array_reduce - 功能风格的php - 适应您的需求。

【讨论】:

谢谢@Tom。这似乎是改变标志的最有效和最简单的方法。 :)【参考方案2】:

需要像这样手动检查每个变量:

echo "$a " . ($b < 0 ? " - " . abs($b) : " + $b") . ($c < 0 ? " - " . abs($c) : " + $c") . ($d < 0 ? " - " . abs($d) : " + $d") . ($e < 0 ? " - " . abs($e) : " + $e") . ($f < 0 ? " - " . abs($f) : " + $f");

【讨论】:

谢谢@Lovepreet。我一直在寻找其他方法来保持原始的 echo 语句简短而简单。您的方式仍然比使用 6 个不同的 if() 块好得多。 :)【参考方案3】:

你可以使用php sprintf函数。

function formatNum($num)
    return sprintf("%+d",$num);

function formatNum($num) 
  $num = (int) $num; // or (float) if you'd rather
  return (($num >= 0) ? '+' : '-') . $num; // implicit cast back to string

更多详情请阅读:-http://php.net/manual/en/function.sprintf.php

【讨论】:

所以参考:***.com/questions/2682397/…【参考方案4】:

试试这个

$a = 10;

$b=-20;

$text = $a." ".$b;

$text= str_replace(" ", "+", $text);

echo $text;

输出

10+-20

【讨论】:

【参考方案5】:

将数字放入数组并使用array_reduce 创建字符串

$numbers = [5, -10, 12, -18, 9, -7];
$first = array_shift($numbers);

echo array_reduce($numbers, function($str, $num) 
    return $str . sprintf(' %s %d', $num < 0 ? '-' : '+', abs($num)); 
, $first);

演示~https://eval.in/1034635

这样您就可以处理任意数量的数字,而无需到处重复逻辑。

【讨论】:

以上是关于在 PHP 中打印带有正确 (+/-) 符号的数字序列的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 中打印货币数字格式

从 formatCurrency 中删除货币符号

如何正确获取 PHP 和 MySQL 中的欧元符号

使用winspool.Drv-WritePrinter打印使用符号而不是正确的页面打印数百页

如何生成带有符号的随机字符串

格式化带前导符号的数字