質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • PHP

    20335questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

PHPで特定の値が含まれているか調べる方法

解決済

回答 5

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 375

gsuisk

score 64

100までの数で3の倍数と、3のつく数字の時に"three"と出力させるプログラムを作りたいです。

3の倍数は以下のようにしました。

for($i=1; $i<=100; $i++){
  if($i%3==0){
    echo "three";
  }else{
    echo $i;
  }
  echo "<br>";
}

しかし、3を含む時という条件をどのようにして確認すればよいのかわかりません。

正規表現で試してみたのですが、全部threeと出力されてしまいます...

for($i=1; $i<=100; $i++){
  $result=preg_match("/3{0,1}/", (string)$i);

  if($i%3==0){
    echo "three";
  }else if($result){
    echo "three";
  }else{
    echo $i;
  }
  echo "<br>";
}

初歩的な質問ですみませんが、お答えしていただけると幸いです。


追記です。

今回の場合、最大で100だとわかっているので、無理やりですが一の位、十の位、百の位の値を調べてやってみたのですが、3の倍数しかthreeになりません。

for($i=1; $i<=100; $i++){

  $x = $i/100;               //百の位
  $y = ($i- $x*100)/10;      //十の位
  $z = $i-($x*100 + $y*10);  //一の位

  if($i%3==0){
    echo "three";

  }else if($x==3 || $y==3 || $z==3){
    echo "three";

  }else{
    echo $i;
  }
  echo "<br>";
}

なぜこれがうまく機能しないのでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • gsuisk

    2017/09/20 00:36

    $i=1のとき、$x = $i/100; はなぜ0にならずに0.01となってしまうのでしょうか?C言語と挙動は違うのでしょうか?

    キャンセル

  • A.Ichi

    2017/09/20 07:43 編集

    変数の型は、その変数が使用される文により定義される様です。$x = (int)($i/100); $y = (int)(($i- $x*100)/10);

    キャンセル

  • gsuisk

    2017/09/20 15:52

    ありがとうございました!

    キャンセル

回答 5

checkベストアンサー

+7

それは

$result=preg_match("/3{0,1}/", (string)$i);

が常に0文字でマッチするためです


  • 特定の桁に3が含まれる 30,31,32 等も含む
$result=preg_match("/3/", (string)$i);
  • 1桁目に3が含まれる 30,31,32 等も含む
$result=preg_match("/^3/", (string)$i);
  • 1の桁に3が含まれる 13,23,23 等も含む
$result=preg_match("/3$/", (string)$i);
  • 3の倍数である
$result=($i%3)==0

 追記

  • 各桁が3 である
# 1の位
$result=($i%10)==3
# 10の位
$result=(floor($i/10)%10)==3
# 100の位
$result=(floor($i/100)%10)==3

まあ 100までしかないなら

for($i=1; $i<=100; $i++){
   // 3の倍数
   // 1の位が3
   // 30台
   if ($i % 3 == 0 || $i % 10 == 3 || (30 <= $i && $i < 40)) {
      echo "three";
   }  else {
      echo $i;
   }
   echo "<br>";
}

という方法もある

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/18 19:17 編集

    for($i=1; $i<=100; $i++){

    //$result=preg_match("/3$/", (string)$i); //これはなくてもよい
    //$result=preg_match("/^3/", (string)$i); //これはなくてもよい

    $result=preg_match("/3/", (string)$i);

    if($i%3==0){
    echo "three";
    }else if($result){
    echo "three";
    }else{
    echo $i;
    }

    echo "<br>";
    }

    これでできました!ありがとうございます!

    キャンセル

  • 2017/09/18 19:23

    無理やり正規表現を使わずにやってみたのですが、うまくいきません...
    もしよければ追記も見ていただきたいです。

    キャンセル

+1

既に回答が出ているため補足情報ですが、正規表現チェッカーも正規表現の確認・調整にお役立てください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/18 19:17

    ありがとうございます。参考にさせていただきます!

    キャンセル

+1

  • 3で割ったあまりが0
  • 10で割ったあまりが3
  • 10で割った商=10で割ってintをとった数値が3

 sample

for($i=1; $i<=400; $i++){
  if($i%3===0 ||
     $i%10===3 ||
     call_user_func(function($x){
       for($j=1;$j<log10($x);$j++){
         if(intval($x/pow(10,$j))%pow(10,$j)===3) return true;
       }
     },$i)
     ){
    print "<span style=\"color:red\">ok:".$i."</span><br>";
  }else{
    print "ng:".$i."<br>";
  }
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/19 12:13

    sampleつけときました

    キャンセル

+1

@r_ym さんの回答にあるように、値を確認するとわかると思いますが、この式だと int の演算とはなっていないので期待する動きになっていません。

PHP:型の相互変換

3のつく数字を判定するだけなら、 PHP:strpos をあたってみると楽できると思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/20 00:20

    C言語でできたのでPHPでも同じだと思っていました...ありがとうございます。

    キャンセル

  • 2017/09/20 09:36

    言語ごとに言語仕様というのは、同じところや異なるところがあるので、一つ一つレファレンスをあたってみましょう。PHPでの型の挙動について参考となるリンクを追記しました。

    キャンセル

  • 2017/09/20 15:52

    わかりました。ありがとうございます。

    キャンセル

-1

なぜこれがうまく機能しないのでしょうか?

3の倍数以外のときに、$x,$y,$zをver_dumpしてみると、解決の糸口が見えるかもしれませんよ。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    phpの[]について

    初めて質問させて頂きますので、うまく伝えられないかもしれませんがお許しください。 学習サイトを参考にPHPを勉強中なのですが、         if (isset($urana

  • 解決済

    【PHP】while文の複数条件

    基本的なことかもしれませんが、わからないのでご教授いただければなと思います。 whileの基本的な文法として コード 初期値; while(条件式){ A処理を実行する

  • 解決済

    PHPで1~100までの数字を連続して足しながら表示させたい

    1+2=3 3+3=6 6+4=10 10+5=15のように足し算をしながら表示させたいです。どういうアルゴリズム、考え方をすれば良いのかわかりません おそらくfo文を使うの

  • 解決済

    PHP sessionで値を表示する

    前提・実現したいこと $_SESSION[0,1,2,...,n]に他のページでn+1度目に入力された値($_POST[""])を保持したいです。一人チャットみたいな感じを想定し

  • 解決済

    重複した配列の抽出

    2つの文字列の組み合わせが複数あり、その中から重複しているもののみを抽出しようとしています。 組合せ順も同一のもののみを抽出します。 $target = array(arr

  • 解決済

    カートの合計金額に可変する送料の足し方を教えてください。

    あまり綺麗なコードではないのですが、カートの中身です。 if文で価格や商品によって送料なしか700円足すかにしてるのですが、 下から四行目の合計を正しく表示させるには何を足せば

  • 解決済

    連想配列でキーだけ取り出したい

    いつもこちらのサイトでは、お世話になっております。 phpの連想配列ついて、1つ質問させて下さい。  以下のコードで、キーだけ取り出したいのですが、 方法はありますで

  • 解決済

    php 繰り返し処理と条件分岐 

    現在指定行でリセットし、出力をするプログラムを記述しているのですが、 行のリセットのための入力を空で送信した場合、下記のような出力が できない状態です。どこの記述が間違っている

同じタグがついた質問を見る

  • PHP

    20335questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。