在 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 中打印带有正确 (+/-) 符号的数字序列的主要内容,如果未能解决你的问题,请参考以下文章