使用正确的 (+/-) 符号打印 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
}
试试这个
$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);
这样您就可以处理任意数量的数字,而无需在任何地方重复逻辑。
最简单的方法是更正最终字符串中的运算符外观:
$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 -- 适应你的需要。
我需要按顺序打印一些数字,数字之间有 + 和 -。但是,我事先并不知道哪个数字是正数,哪个数字是负数。目前,我这样回应他们:
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
}
试试这个
$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);
这样您就可以处理任意数量的数字,而无需在任何地方重复逻辑。
最简单的方法是更正最终字符串中的运算符外观:
$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 -- 适应你的需要。