• ベストアンサー

文字列の10+10を20と表示したい

はじめまして。 データーベースのstring型フィールドに10+10と文字列で入っています。 そのままprintで出力すると10+10と表示されます。 そうではなく20とprintで表示するにはどうすればいいのでしょうか。 intval関数やeval関数等自分で思考錯誤したのですが、どうしても、20と表示されません。 どのようにすればいいのか、ぜひ教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • buraru
  • ベストアンサー率54% (12/22)
回答No.3

<?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

yorkies
質問者

お礼

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

その他の回答 (4)

  • ts3m-ickw
  • ベストアンサー率43% (1248/2897)
回答No.5

PHPの回答じゃなくて恐縮だけど、データベースがSQLを使えるならSQLに計算させればいいです。 すなわち、 SELECT '10+10'; は「10+10」を返すけど、 SELECT 10+10; は「20」を返します。 結果だけPHPで受け取れば簡単。 という手もあるということで。

yorkies
質問者

お礼

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

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

単純なはなしreturnすればいいでしょう。 <?php $str = '10+10'; $kekka= eval("return {$str};"); print $kekka+10; ?>

yorkies
質問者

補足

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

  • buraru
  • ベストアンサー率54% (12/22)
回答No.2

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から引っ張ってきた文字列も、スクリプト中で宣言した文字列でも同じだと思うので、上で行けるんでは無いでしょうか?

  • qaqa013
  • ベストアンサー率27% (17/62)
回答No.1

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

yorkies
質問者

お礼

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

関連するQ&A

専門家に質問してみよう