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

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

新規登録して質問してみよう
ただいま回答率
85.46%
PHP

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

Q&A

解決済

2回答

1981閲覧

PHP 1~50までの中から、3の倍数と3がつく文字を配列にいれて表示したい

nakayamaakg

総合スコア12

PHP

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

0グッド

0クリップ

投稿2021/06/09 13:11

編集2021/06/09 13:19

閲覧ありがとうございます。

やりたいこと:1~50までの数字から3の倍数と3がつく文字を
配列にいれて表示させたい

現状:3の倍数を配列にいれて表示まで出来たのですが、$iを文字列
に変換し3の文字を検索判定して3があった場合配列に入れるという意味で下記コードを書いたら
「未定義の関数str_contains()への呼び出し」と表示されてしまいます。

str_contains()の使い方はhttps://mebee.info/2020/11/29/post-24224/
を参考に書いてみたのですが、どこが悪いのかわかる方いらっしゃいましたら教えて頂けませんでしょうか。

※バージョンphp7ではstr_contains()はないようですが、自分のPHPのバージョンを確認したらPHP 8.0.1でした。

php

1 2   <?php 3  $stack =array(); 4 5  for($i = 1; $i<=50;$i++){ 6 $str = strval($i); 7 $strThree = '3'; 8 9 if($i%3 === 0 or str_contains($str,$strThree)){ 10 array_push($stack,$i); 11 }; 12 }; 13 14 foreach($stack as $value){ 15 echo $value; 16 }; 17 18 ?>

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

8 系で動かしたところ、str_contains() は正しく動作しました。
提示のコードには全角スペースが入っており、そのままだと syntax error が発生します。

投稿2021/06/10 00:02

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nakayamaakg

2021/06/10 01:04

ご指摘ありがとうございます。 確かに全角がないと思っていましたが、貼り付けしなおしてみたら全角がございました。 全角消したうえで、再度画面表示したらエラー53 の未定義関数 str_contains() の呼び出し と表示されたのですが、te2ji様がstr_contains() が動作したと連絡頂いたコードは 私が上記に書いたコードでしょうか。
guest

0

自己解決

代替え案を探していたら「strpos」でうまくいきました・・・

$stack =array();

for($i = 1; $i<=50;$i++){ $str = strval($i); $strThree = '3'; if($i%3 === 0 or strpos($str,$strThree)){ array_push($stack,$i); }; }; foreach($stack as $value){ echo $value; };

投稿2021/06/09 14:05

nakayamaakg

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2021/06/09 14:16

うまく行かないと思いますが、ちゃんと結果見てますか? 仕様の違う関数を単純に差し替えても駄目です。関数に合わせた使い方をしないと。
nakayamaakg

2021/06/09 14:28

コメントありがとうございます。 $str = strval($i); ここが指摘頂いた箇所でしょうか。 一応、エラーがでず、36912131518212324273033363942434548 と3の倍数以外にも3がつく文字を表示してしまいました。。
otn

2021/06/09 15:34 編集

???? 何を言ってるのですか? 自分が何をしたかったのか、理解してますか? > と3の倍数以外にも3がつく文字を表示してしまいました。。 がしたかったことでは? それが出来てないという指摘ですが。
nakayamaakg

2021/06/09 23:31

現在エラーがでず、36912131518212324273033363942434548 と画面表示されています。 上記にて、13,23,43と3で割り切れない3の文字が表示できているので 問題ないのではないでしょうか。
otn

2021/06/10 00:12

> 上記にて、13,23,43と3で割り切れない3の文字が表示できているので 問題ないのではないでしょうか。 1~50のうち、3の倍数と3がつく文字を「すべて」求めるのかとばかり思っていましたが、 すべてじゃなくていいのでしょうか? この手の問題は普通はすべて求めるので、てっきり「すべて」かと思っていました。
nakayamaakg

2021/06/10 00:57 編集

数字を文字として3がないか検索した目的は13,23,43を表示させるためでした。 ※33は3で割り切れるので or strpos($str,$strThree)がないコードにて 136912151821242730333639424548 と表示が出来ておりました。
otn

2021/06/10 04:00

31 や 32 などは 3 がつくけど、表示されないのが正解という意味?? 3 を含むうち、何が対象で何が対象で無いのか質問文からは読み取れない。
nakayamaakg

2021/06/10 12:35

31~39すべて該当します。 すいません。出題課題で解いていたのですが、31~39について構想外でした。
otn

2021/06/10 12:44

そうですか。であれば、2021/06/09 23:16 のコメントの通りです。
nakayamaakg

2021/06/10 12:58

コメント頂きありがとうございました。 https://www.flatflag.nir87.com/strpos-210 このサイトにて 「検索する文字列が先頭にある場合エラーになる」ことへの解消方法が記載されており 下記コードにて31~39すべての表示に成功しました。 $stack =array(); for($i = 1; $i<=50;$i++){ $str = strval($i); $strThree = '3'; if($i%3 === 0 or strpos($str,$strThree) !== false){ array_push($stack,$i); }; }; foreach($stack as $value){ echo $value; };
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問