我正在使用PHP访问外部API。
当调用特定的API方法时,它会返回比我想要显示的数字更高的数字。
但是,API将整数作为字符串而不是整数返回。
问题:如何将返回的字符串减1,因为它不是整数
基本上,我想做跟随伪代码(不起作用):
echo external_api() -1; // problem is, this returns "X -1" where "X" is an integer but returned as a strong
答案 0 :(得分:7)
external_api()
函数回显整数(9
)并返回NULL
。因此,当您尝试从中减去时,您会得到如下内容:
function external_api() {echo "9";}
echo external_api() - 1;
...会产生9-1
。
神秘解决了。
现在,解决它。假设您无法更改外部API ...
ob_start();
external_api();
$output = ob_get_clean();
echo ((int)$output) - 1;
下一次,发布一切,所以我们不会长时间不知所措。
答案 1 :(得分:2)
您可以将返回值强制转换为整数:
echo ((int) external_api()) - 1;
** 编辑 **
这是我跑的代码
function external_api() {
return "100";
}
echo ((int) external_api()) - 1;
,输出为99
。如果这对您不起作用,则该函数不会返回正确的值。否则,请详细说明,因为它没有任何意义。
此外,正如deceze指出的那样,即使没有强制转换,PHP也足够聪明,可以在数学运算符上完成:
echo external_api() - 1;
也会输出99
所以很明显这个神秘的功能会发生一些事情,因为问题并不在你说的地方。
BTW :"2" -1
的结果; 永远可以"2 -1"
,因为-
甚至不是字符串运算符。 PHP中唯一的字符串运算符是.
用于连接:"2" + 1 = 3;
其中"2" . 1 = "21"
答案 2 :(得分:2)
如果函数返回一个字符串,那么您的代码应该可以正常工作。您可以尝试将值转换为整数:
echo (int)external_api() - 1;
修改强>
听起来您可能需要在递减之前使用preg_replace清理数据。试试这个:
echo preg_replace('/[^0-9]/', '', external_api()) - 1;
答案 3 :(得分:1)
使用(int)
投射它或使用intval()
将其转换为整数:
echo ((int) external_api()) - 1;
或
echo intval(external_api()) - 1;
施法通常是最快的。
答案 4 :(得分:0)
尝试echo intval(external_api())-1
或者如果某些更高的no或其他数据类型为floatval