PHP:如何将字符串函数递减1?
我正在使用PHP访问外部API 当调用一个特定的API方法时,它返回一个比我想要显示的值高的数字 但是,API将整数作为字符串而不是整数返回 问题:由于返回的字符串不是整数,如何将其递减1 从本质上讲,我想执行以下伪代码(不起作用): 使用PHP:如何将字符串函数递减1?,php,Php,我正在使用PHP访问外部API 当调用一个特定的API方法时,它返回一个比我想要显示的值高的数字 但是,API将整数作为字符串而不是整数返回 问题:由于返回的字符串不是整数,如何将其递减1 从本质上讲,我想执行以下伪代码(不起作用): 使用(int)强制转换它,或使用intval()先将其转换为整数: echo ((int) external_api()) - 1; 或 强制转换通常最快。您可以将返回值强制转换为整数: echo ((int) external_api()) - 1; **
(int)
强制转换它,或使用intval()
先将其转换为整数:
echo ((int) external_api()) - 1;
或
强制转换通常最快。您可以将返回值强制转换为整数:
echo ((int) external_api()) - 1;
**编辑**
这是我运行的代码
function external_api() {
return "100";
}
echo ((int) external_api()) - 1;
输出为99
。如果这对您不起作用,那么函数没有返回正确的值。否则,请详细说明,因为它没有任何意义
此外,正如所指出的,即使没有强制转换,PHP也足够聪明,可以在数学运算符上实现:
echo external_api() - 1;
还将输出99
,因此很明显,在这个神秘的函数中发生了一些事情,因为问题不在您所说的位置
顺便说一句:
“2”-1
的结果;因为-
甚至不是字符串运算符,所以不能成为“2-1”
。PHP中唯一的字符串运算符是用于连接的
:“2”+1=3代码>其中“2”。1=“21”
尝试echo intval(external_api())-1
或者如果函数返回字符串,则代码应该实际工作。您可以尝试将该值强制转换为整数:
echo (int)external_api() - 1;
编辑
听起来您可能需要在递减数据之前使用preg_replace对数据进行清理。试试这个:
echo preg_replace('/[^0-9]/', '', external_api()) - 1;
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;
不过,下次发布所有内容,这样我们就不会在很长一段时间内挠头了。为什么不在没有任何强制转换的情况下发布external_api()-1
??这就是php,这就是它的工作原理。发布的代码不应该返回“X-1”,因为在任何地方都找不到连接运算符。事实上,它应该按照你想要的方式工作……这不起作用。这将返回“X-1”(字面意思,其中X是一个整数)function three(){return“3”}echo three()-1代码>输出2
。你的问题在别的地方。发布你的真实代码和/或更多代码。两者都不起作用。如果external_api()的值为=9,我想显示8。上面的代码只显示9(而不是8)。奇怪的有什么想法吗?没用。如果external_api()的值为=9,我想显示8。上面的代码只显示9(而不是8)。奇怪的有什么想法吗?@Jason我可以验证Yanick建议的代码是否有效。也许您的API返回的不是数字?也许是资源?您可以对输出执行var\u dump()
吗?不起作用。如果external_api()的值为=9,我想显示8。上面的代码只显示9(而不是8)。奇怪的有什么想法吗?试着在命令行中运行这个命令(它将返回8):>php-r'函数a(){return“9”}echo(int)a()-1;'有趣的是,对于代码echo“9NULL”-1代码>,PHP仍将输出8。请参阅我的第二个答案。找到答案。+1哇,有两件事需要学习:永远不要相信OP(函数没有返回任何东西)和(@Jason)如果有什么不可能的事情,寻找其他解释并测试它们(只需调用external\u api()
而不调用echo
就可以确认这一点)。
function external_api() {echo "9";}
echo external_api() - 1;
ob_start();
external_api();
$output = ob_get_clean();
echo ((int)$output) - 1;