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

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

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

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

Q&A

解決済

2回答

206閲覧

PHP 引数と戻り値の初心者用課題が分かりません。

mint22

総合スコア19

PHP

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

0グッド

0クリップ

投稿2019/04/26 16:14

前提・実現したいこと

課題の内容は、「引数が2つの関数を作成してください。1つ目の引数に3人分のプロフィールを、2つ目の引数に検索文字を受け取ります。 関数の中では、1つ目の引数で得た3人分のプロフィール(項目はID,名前、生年月日、出身県とする)から、検索文字列を名前に含む(部分一致)プロフィールを探し、該当1件を返却する。」
というものです。自分なりに調べてやってみたのですが、良く分かりません。
よろしくお願いします。

発生している問題・エラーメッセージ

Warning: strstr() expects parameter 1 to be string, array given in C:\xampp\htdocs\rensyu.php on line 4

該当のソースコード

php

1 2 3<?php 4function myprofile($allprof,$kensakumozi){ 5 return strstr($allprof,$kensakumozi); 6 } 7 8 $hasegawa=array("305151","長谷川くん","4月12日","北海道"); 9 $miyamoto=array("235155","宮本さん","3月31日","青森県"); 10 $tanaka=array("35915","田中くん","2月15日","東京都"); 11 12 $allprof=array($hasegawa,$miyamoto,$tanaka); 13 $kensakumozi="くん"; 14 $var=myprofile($allprof,$kensakumozi); 15 echo $var; 16 ?> 17 18

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

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

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

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

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

guest

回答2

0

ベストアンサー

だいたい出来てるじゃないですか。この調子で行きましょう。

コードから察するに、検索のところでどのようにすれば良いか分からない感じですかね。
まず、関数から返却するのは、$allprofのうちの1件です。
なので、返却するのはこのコードの中で言えば$hasegawa、$miyamoto、$tanakaのいずれかになります。

$allprofのうちの1件が名前を含むかどうか調べるには、色々ありますが、foreachが分かりやすいと思います。

php

1foreach ($allprof as $one) { 2 3}

foreachでは、$allprofの中の配列をぐるぐる$oneに渡します。

php

1foreach ($allprof as $one) { 2 echo $one[1] . PHP_EOL; 3}

とやると、どのような挙動になるか分かりやすいと思います。
上のコードの結果は下記です。

長谷川くん 宮本さん 田中くん

ここまで来たら、strstrの出番です。

php

1foreach ($allprof as $one) { 2 if (strstr($one[1], $kensakumozi)) { 3 var_dump($one); 4 } 5}

結果は

array(4) { [0]=> string(6) "305151" [1]=> string(15) "長谷川くん" [2]=> string(9) "4月12日" [3]=> string(9) "北海道" } array(4) { [0]=> string(5) "35915" [1]=> string(12) "田中くん" [2]=> string(9) "2月15日" [3]=> string(9) "東京都" }

となり、名前に「くん」が入っているものが取れました。
該当件数は複数ありますが、1件戻れば良いので、戻り値は1件分が格納されるようにします。

php

1<?php 2function myprofile($allprof,$kensakumozi){ 3 $ret = []; 4 foreach ($allprof as $one) { 5 if (strstr($one[1], $kensakumozi)) { 6 $ret = $one; 7 } 8 } 9 return $ret; 10} 11 12$hasegawa=array("305151","長谷川くん","4月12日","北海道"); 13$miyamoto=array("235155","宮本さん","3月31日","青森県"); 14$tanaka=array("35915","田中くん","2月15日","東京都"); 15 16$allprof=array($hasegawa,$miyamoto,$tanaka); 17$kensakumozi="くん"; 18$var=myprofile($allprof,$kensakumozi); 19var_dump($var);

こんな感じで良いのではないでしょうか。

投稿2019/04/26 17:58

編集2019/04/26 18:00
takepan1973

総合スコア821

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

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

mint22

2019/04/27 00:24

非常に良く分かりました。ご丁寧にありがとうございます!
takepan1973

2019/04/27 02:22

この調子で頑張って ????
guest

0

引数と戻り値のあたりが分からないのであれば、まずは、関数を作らないで書いてみましょう。

投稿2019/04/26 16:31

otn

総合スコア84423

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問