我对php很陌生。我想将字符串转换为整数值。
我使用以下代码进行转换
$val='(100*2)';
echo (int)($val); //This will showing output as 0
但是echo (int)((100*2)); /This will showing output as 200
请帮助我解决这个问题.提前感谢
(int)($val)
的计算结果为 0,因为$val
的值不是数字字符串(即可以直接转换为数字的字符串)。
如果您确实需要这种功能,请尝试eval()
:
$val='(100*2)';
echo (int)($val); //This will showing output as 0
eval('$newval='.$val.';');
echo $newval;
但请注意:eval()
可能很危险!
从 http://php.net/manual/en/function.eval.php:
谨慎
eval() 语言结构非常危险,因为它允许 执行任意 PHP 代码。因此,不鼓励使用它。如果你 已经仔细验证了除了使用它之外别无选择。 构造,特别注意不要传递任何用户提供的数据 在没有事先正确验证的情况下进入它。
编辑:在 eval 参数中添加了.';'
,使其成为合法的 php 指令。
最常见的建议是 - 将字符串评估为 PHP 代码,例如:
$val = '(100*2)';
eval('$val = '.$val.';');
-但这不安全,eval
应尽可能避免。
或者,有 bcParser for PHP 可以解决此类问题。这比eval
更安全.
最后,我怀疑你是否真的需要做这样的事情 - 似乎你用错误的方法解决了一些问题(参见XY问题描述)
你可以使用 php eval 函数来做到这一点。首先,您必须检查特殊字符和公式字符。
$val='(100*2)';
echo matheval($val);
function matheval($equation)
{
$equation = preg_replace("/[^0-9+'-.*'/()%]/","",$equation);
// fix percentage calcul when percentage value < 10
$equation = preg_replace("/([+-])([0-9]{1})(%)/","*(1'$1.0'$2)",$equation);
// calc percentage
$equation = preg_replace("/([+-])([0-9]+)(%)/","*(1'$1.'$2)",$equation);
// you could use str_replace on this next line
// if you really, really want to fine-tune this equation
$equation = preg_replace("/([0-9]+)(%)/",".'$1",$equation);
if ( $equation == "" )
{
$return = 0;
}
else
{
eval("'$return=" . $equation . ";" );
}
return $return;
}
推荐这样做,但您可以使用 eval 来满足你的需要
eval('$val = (100*2)');
echo intval($val);
为什么不只是:
$x=intval(100);// <- or an other value from the cleaned user input
$y=intval(2);
$val=$x*$y;
echo $val;
你没有给出一个目标。
我可以解释为什么你的代码像它一样工作。
'(100*2)' 是一个无法转换为 int 的字符串,因为它确实包含数字以外的其他字符。每个无法转换的字符串将导致 0。
echo (int)(100*2) 将起作用,因为您使用数字而不使用字符串。也无需转换,没有演员表即可工作,只需回声(100*2);
请记住PHP使用松散类型。您几乎永远不需要转换类型。此方案非常设置。