使用正确的 (+/-) 符号打印 PHP 中的数字序列

Print a sequence of numbers in PHP with the correct (+/-) sign

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

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() 块来做到这一点,但这似乎需要大量工作,而且每次都这样做很容易出错。我可以做些什么来输出正确的符号。

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

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");

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

试试这个

$a = 10;

$b=-20;

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

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

echo $text;

输出

10+-20

将数字放入数组中并使用 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

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

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

$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 -- 适应你的需要。