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

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

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

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

Q&A

解決済

2回答

396閲覧

【PHP】array、in_arrayの使われ方について

akari_sss

総合スコア20

PHP

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

0グッド

0クリップ

投稿2018/11/08 05:59

オライリー本のプログラミングPHPより皆様に質問です。

以下コードの結果は、フォームに入力があった場合、
「You did have all the required」

入力がなかった場合、
「You did not have all the required」
となります。

<?php function hasRequired($array, $requiredFields){ $array = $keys = array_keys($array); foreach ($requiredFields as $fieldName){ if (! in_array($fieldName,$keys )){ return false; } } return true; } if ($_POST ['submitted']) { $testArray = array_filter($_POST); echo "<p>You "; echo hasRequired ($testArray, array( 'name', 'email_adress' ))? "did" : "did not"; echo "have all the required.</p>"; } ?> <form action ="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="POST"> <input type="text" name="name"/> <input type="text" name="email_adress"/> <input type="text" name="age"/> <input type="submit" value="submit" name="submitted"/> </form>

質問①$requiredFieldsは一体どこからやってきたのでしょうか
質問該当箇所:
function hasRequired($array, $requiredFields「ここ」)

質問②$arrayのイコール以降、何もコードが書かれていないのですが、どういう意味でしょうか。。
質問該当箇所:
function hasRequired($array, $requiredFields){
$array = 「ここ」

質問③array_filterをなぜ使っているのでしょうか。。
array_filter「ここ」($_POST);

質問④この部分のコードは何を意味しているでしょうか。。
echo hasRequired ($testArray, array(
'name',
'email_adress'
))? "did" : "did not";

質問だらけで大変申し訳ございません。。
もし、一つだけでもお分かりになる方がいらっしゃいましたら、
ご教授頂けますと幸いです。
よろしくお願い致します。

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

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

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

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

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

guest

回答2

0

質問①$requiredFieldsは一体どこからやってきたのでしょうか
質問④この部分のコードは何を意味しているでしょうか。。

上で定義したhasRequired関数を、下のecho hasRequired(...)で呼び出しています。引数は実際に指定された$testArrayとその場で書かれた配列が入っていきます。

質問②$arrayのイコール以降、何もコードが書かれていないのですが、どういう意味でしょうか。。

おそらく単なる間違いでしょう。文法的には、$array = $keys = array_keys($array);と同じことになって、$keysと同じものが$arrayに代入されますが、この$arrayはこれ以降で使われないので、代入しても無意味です。

投稿2018/11/08 06:07

maisumakun

総合スコア145183

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

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

akari_sss

2018/11/08 08:43

お答えいただきまして、ありがとうございます!! ユーザーランキング一位の人にこたえて頂けてびっくりしました! またよろしくお願いいたします!
guest

0

ベストアンサー

質問①
hasRequiredメソッドの引数として2つの変数を定義しています。
なのでどこからというより「$arrayと$requiredFieldsを渡すよう(筆者が)決めた」となります。

質問②
多分筆者のミスです。この行は不要です。

質問③
array_filterは第二引数無しで使うと「配列の値がfalseになる要素を除去」という動きになります。
PHP: array_filter - Manual
$_POSTに対して使っているので、未記入な要素を除去します。
(例えば$_POST['name']=''だったら、'name'要素が$_POST配列から取り除かれる)

質問④
三項演算子?hasRequiredメソッドの組み合わせです。
hasRequiredを$array=$testArray、$requiredFields=array('name','email_adress')として実行
hasRequiredの実行結果がtrueなら"did"、falseなら"did not"をechoする
という2つの処理が1行になっていると考えれば理解頂けるでしょうか。


トータルで見ると
質問③で「POSTから未記入のものを除去」
hasRequiredで「$requiredFieldsの要素が$arrayのキーとして全て含まれていたらtrue、いなかったらfalseを返す」
質問④で「hasRequiredの結果により文言出し分け」
なので「フォームのnameとemail_adressの両方が記入されていればYou did have all the required、未記入があればYou did not have all the requiredと表示する」という挙動になります。

投稿2018/11/08 06:29

sakura_hana

総合スコア11427

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

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

akari_sss

2018/11/08 08:40

全部お答えいただいてありがとうございます!! すごくわかりやすかったです!! またよろしくお願いいたします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問