2

我对 php 很陌生。我想将字符串转换为整数值。

我使用以下代码进行转换

$val='(100*2)';
echo (int)($val); //This will showing output as 0

echo (int)((100*2)); /This will showing output as 200

请帮助我解决这个问题。谢谢提前

4

6 回答 6

3

(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 指令。

于 2013-10-01T12:10:11.500 回答
1

您可以使用 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;
}
于 2013-12-16T10:18:20.733 回答
1

最常见的建议是 - 将您的字符串评估为 PHP 代码,例如:

$val = '(100*2)';
eval('$val = '.$val.';');

- 但这是不安全的,eval应尽可能避免。

或者,有用于 PHP 的bcParser,它可以解决此类问题。这比eval.

最后,我怀疑你真的需要做这样的事情 - 似乎你用错误的方法解决了一些问题(参见XY-problem description)

于 2013-10-01T12:13:02.237 回答
0

我不推荐这个,但你可以使用eval来满足你的需要

eval('$val = (100*2)');
echo intval($val); 
于 2013-10-01T12:09:15.590 回答
0

为什么不只是:

$x=intval(100);// <- or an other value from the cleaned user input
$y=intval(2);
$val=$x*$y;
echo $val;
于 2013-10-01T12:09:29.967 回答
0

你没有给出一个目标。

我可以解释为什么你的代码会像现在这样工作。

'(100*2)' 是一个不能转换为 int 的字符串,因为它确实包含除数字之外的其他字符。每个无法转换的字符串都将导致 0。

echo (int)(100*2) 将起作用,因为您使用数字而不使用字符串。无需转换,也无需转换,只需 echo (100*2);

记住 PHP 使用松散类型。您几乎不需要转换类型。这个场景非常成熟。

于 2013-10-01T12:10:49.410 回答