アプリ版:「スタンプのみでお礼する」機能のリリースについて

はじめまして。

データーベースのstring型フィールドに10+10と文字列で入っています。
そのままprintで出力すると10+10と表示されます。

そうではなく20とprintで表示するにはどうすればいいのでしょうか。
intval関数やeval関数等自分で思考錯誤したのですが、どうしても、20と表示されません。

どのようにすればいいのか、ぜひ教えてください。

A 回答 (5件)

<?php


$str = '10+10';
//式作成
$shiki = sprintf('$kekka=%s;',$str);
//式実行
eval($shiki);
//(注意:この時点で、$kekkaに20が入ります。)

//計算の流れを出力
echo $str.'→'.$shiki.'→'.$kekka;
?>

//を忘れていました。
これでコピペで動くかな。

ついでなのでマニュアルリンク。
http://php.net/manual/ja/function.eval.php
    • good
    • 1
この回答へのお礼

丁寧に教えていただきありがとうございます。
evalの使い方を間違えていたようで、
buraruさんの記述でうまくいきました。
ついでにevalの使い方ももう少し練習しようと思います。
ありがとうございました。

お礼日時:2010/04/16 12:00

PHPの回答じゃなくて恐縮だけど、データベースがSQLを使えるならSQLに計算させればいいです。


すなわち、
SELECT '10+10'; は「10+10」を返すけど、
SELECT 10+10; は「20」を返します。
結果だけPHPで受け取れば簡単。

という手もあるということで。
    • good
    • 0
この回答へのお礼

さっそくSQLを調べてみたのですが、sum関数等たくさんあり、びっくりしました。
ひとつ知識が増えました
ありがとうございました。

お礼日時:2010/04/16 23:56

単純なはなしreturnすればいいでしょう。



<?php
$str = '10+10';
$kekka= eval("return {$str};");
print $kekka+10;
?>

この回答への補足

ありがとうございました。解決しました。
eval はこのような使い方もするのですね。
evalの使い方を再度勉強しようと思います

補足日時:2010/04/16 12:03
    • good
    • 0

evalで試行錯誤されたとの事ですが…


一応evalでの書き方を。
<?php
$str = '10+10';
//式作成
$shiki = sprintf('$kekka=%s;',$str);
//式実行
eval($shiki);
(この時点で、$kekkaに20が入ります。)

//計算の流れを出力
echo $str.'→'.$shiki.'→'.$kekka;
?>
出力結果
10+10→$kekka=10+10;→20

DBから引っ張ってきた文字列も、スクリプト中で宣言した文字列でも同じだと思うので、上で行けるんでは無いでしょうか?
    • good
    • 0

学生時代に実習内容としてやったな。

もっともその時に使った言語はC言語でしたけどね。
まず、構文解析の処理を書いて
数字と演算子を分ける処理を書く。
この場合10と+と10って感じに。
後はそれを元に処理を書く。
今回の場合はプラスだけだけどほかに×や÷の処理をしたければ
演算子の優先順入り処理も必要になる。
同プログラム的に処理をすればいいのかは検索すればいろいろなサイトに情報があるしここの文面だけでは説明しきれないので自分で調べてくれ。
    • good
    • 0
この回答へのお礼

早速のアドバイスありがとうございました。
原点に返り、地道に数字と演算子を分ける処理を書くのも有りと
少し考えました。
ありがとうございました。

お礼日時:2010/04/16 11:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!