复杂的PHP数学转换,在一行


Complicated PHP math conversion, on one line

以下是我想要做的:

变量$input可以等于以下任何值:-2 -1 0 1 2

我需要处理这个输入,以便唯一可能的结果是-101。数字应该转换为最接近的数字,所以-2会变成-12会变成1,但10-1都会保持原样。

我知道如何使用多行来实现这一点,但我相信有一些方法可以通过嵌套在一起的一组计算来实现。

这有道理吗?如果我应该澄清,请告诉我。

如果你知道你肯定只会得到这些值,你可以使用:

<?php
$value = max(-1, min(1, $value));
?>

我通常会把它们转换成一个整数显式,以防万一。

<?php
$value = max(-1, min(1, intval($value)));
?>

如果您有GMP扩展,您可以使用:

int gmp_sign(resource $a);

像这样:

<?php $value = gmp_sign($value); ?>

如果你没有GMP扩展,那么你可以创建这样一个函数:

<?php
function sign( $number ) {
    return ( $number > 0 ) ? 1 : ( ( $number < 0 ) ? -1 : 0 );
} 

由于-2和-1的符号为负数,因此上述函数将返回-1。符号为1,2为正,因此上述函数将返回1。0没有符号,因此上述函数将返回0。