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

时间:2018-07-11 05:50:27

标签: php string-formatting

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

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

5 个答案:

答案 0 :(得分:2)

最简单的方法是更正最终字符串中的操作员外观:

std::string::~string()

如果这对您来说是可能的,那么它会尽快完成-没有循环(在php中),没有一次用条件处理每个数字。如果仍然循环播放,我建议使用$s = '5 + -10 + 12 + -18 + 9 + - 7'; // result of interpolation or concatenation $s = str_replace('+ -', '- ', $s); // => "5 - 10 + 12 - 18 + 9 - 7" 的@Phils建议-功能样式php-适应您的需求。

答案 1 :(得分:1)

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

class Meta(type):
    _foo = "original foo value"

    @property
    def foo(cls):
        print("getting foo")
        return cls._foo

    @foo.setter
    def foo(cls, value):
        print("setting foo")
        cls._foo = value

class Klass(metaclass=Meta):
    pass

# this invokes the property methods
print(Klass.foo)
Klass.foo = "new foo value"
print(Klass.foo)

# this won't work, the property is not accessible via an instance of Klass
obj = Klass()
obj.foo         # raises an AttributeError

答案 2 :(得分:1)

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

答案 3 :(得分:1)

尝试

$a = 10;

$b=-20;

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

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

echo $text;

输出

10 + -20

答案 4 :(得分:1)

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

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