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

用正确的(+/-)号在PHP中打印数字序列,php,string-formatting,Php,String Formatting,我需要按+和-的顺序打印一些数字。然而,我事先不知道哪个数字是正的,哪个是负的。目前,我的回应如下: echo "$a + $b + $c + $d + $e + $f"; echo "$a " . ($b < 0 ? " - " . abs($b) : " + $b") . ($c < 0 ? " - " . abs($c) : " + $c") . ($d < 0 ? " - " . abs($d) : " + $d") . ($e < 0 ? " - " . ab

我需要按+和-的顺序打印一些数字。然而,我事先不知道哪个数字是正的,哪个是负的。目前,我的回应如下:

echo "$a + $b + $c + $d + $e + $f";
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");
假设$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 + $c + $d + $e + $f";
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");

需要手动检查每个变量,如下所示:

echo "$a + $b + $c + $d + $e + $f";
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);
}


有关更多详细信息,请阅读:-

您可以使用php sprintf函数

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

有关更多详细信息,请阅读:-

试试这个

$a=10

$b=-20

$text=$a$b

$text=str_replace,+,$text

echo$文本

输出

10+-20

试试这个

$a=10

$b=-20

$text=$a$b

$text=str_replace,+,$text

echo$文本

输出


10+-20

将数字放入一个数组,并使用array\u 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);
演示~


通过这种方式,您可以处理任意数量的数字,而无需到处复制逻辑。

将数字放入数组,然后使用array\u 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);
演示~


通过这种方式,您可以处理任意数量的数字,而无需到处复制逻辑。

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

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

如果这对您来说是可能的,那么它将以最快的速度运行——在php中没有循环,没有使用条件语句一次处理每个数字1。如果您仍然循环,我建议@Phils suggestion使用array\u reduce-函数式php-根据您的需要进行调整。

最简单的方法是在最后一个字符串中更正运算符的外观:

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

如果这对您来说是可能的,那么它将以最快的速度运行——在php中没有循环,没有使用条件语句一次处理每个数字1。如果您仍然循环,我建议@Phils suggestion with array\u reduce-函数式php-适合您的需要。

谢谢@Lovepreet。我在寻找其他方法,使原始echo语句保持简短。您的方式仍然比使用6个不同的if块要好得多:谢谢@Lovepreet。我在寻找其他方法,使原始echo语句保持简短。您的方式仍然比使用6个不同的if块要好得多:参考答案:参考答案:如果第一个数字是负数,它应该是什么样子?如果第一个数字是负数,它应该是什么样子?谢谢@Tom。这似乎是改变标志最有效、最简单的方法谢谢你,汤姆。这似乎是改变标志最有效、最简单的方法