私はphpに非常に慣れていません。文字列を整数値に変換したいです。
次のコードを使用して変換しました
$val='(100*2)';
echo (int)($val); //This will showing output as 0
しかしecho (int)((100*2)); /This will showing output as 200
これを解決するために誰か助けてください。よろしくお願いします
私は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)
$val
の値は数値文字列 (つまり、数値に直接キャストできるもの) ではないため、 は 0 と評価されます。
この種の機能が本当に必要な場合は、次を試してください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 コードを実行できるため、非常に危険です。したがって、その使用はお勧めできません。この構文を使用する以外に選択肢がないことを慎重に確認した場合は、ユーザーが提供したデータを事前に適切に検証せずに渡さないように特に注意してください。
EDIT : eval パラメータに追加.';'
して、正当な php 命令にします。
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;
}
あなたは目標を与えていません。
あなたのコードがそのように機能する理由を説明できます。
'(100*2)' は、数値以外の文字が含まれているため、int に変換できない文字列です。変換できない文字列はすべて 0 になります。
数値を使用し、文字列を使用しないため、echo (int)(100*2) が機能します。変換する必要もありません。キャストがなくても機能します。エコー (100*2) するだけです。
PHP は緩やかな型付けを使用することを忘れないでください。型を変換する必要はほとんどありません。このシナリオは非常に設定されています。