Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:如何将字符串函数递减1?_Php - Fatal编程技术网

PHP:如何将字符串函数递减1?

PHP:如何将字符串函数递减1?,php,Php,我正在使用PHP访问外部API 当调用一个特定的API方法时,它返回一个比我想要显示的值高的数字 但是,API将整数作为字符串而不是整数返回 问题:由于返回的字符串不是整数,如何将其递减1 从本质上讲,我想执行以下伪代码(不起作用): 使用(int)强制转换它,或使用intval()先将其转换为整数: echo ((int) external_api()) - 1; 或 强制转换通常最快。您可以将返回值强制转换为整数: echo ((int) external_api()) - 1; **

我正在使用PHP访问外部API

当调用一个特定的API方法时,它返回一个比我想要显示的值高的数字

但是,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;