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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

1921閲覧

compact関数について

toll_tree

総合スコア199

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2019/05/09 03:52

compact関数が良く分からないです。

php

1// Content-TypeをJSONに指定する 2header('Content-Type: application/json'); 3 4// $_POST['age']、$_POST['job']をエラーを出さないように文字列として安全に展開する 5$age = (string)filter_input(INPUT_POST, 'age'); 6$job = (string)filter_input(INPUT_POST, 'job'); 7 8// 整合性チェック 9if ($age === '' || $job === '') { 10 $error = '年齢と職業を両方入力してください'; 11} else if (!ctype_digit($age)) { 12 $error = '年齢は正の整数で入力してください'; 13} else if (($age = (int)$age) > 100) { 14 $error = '生きすぎィ!'; 15} 16 17if (!isset($error)) { 18 // 正常時は 「200 OK」 で {"data":"24歳、学生です"} のように返す 19 $data = "{$age}歳、{$job}です"; 20 echo json_encode(compact('data')); 21} else { 22 // 失敗時は 「400 Bad Request」 で {"error":"..."} のように返す 23 http_response_code(400); 24 echo json_encode(compact('error')); 25}

上記のコードは、こちらの記事でajaxにつてい学習している際に出てきたコードなのですが、campact関数では、なんの処理を行っているのでしょうか?
PHPマニュアルを見たのですが、良く分からなかった為、質問させて頂きました。

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

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

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

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

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

guest

回答2

0

「マニュアルを読んだがわからない」だけでは理解度合いが何も伝わりません。
理解することを放棄して他人に丸投げしたような印象さえ受けます。

マニュアルにはサンプルコードもあります。ミニマムコードで色々なパターンを試して挙動を確認すれば良いのではないのでしょうか。

「なんの処理を行っているか」はマニュアルに書いてあります。他に何が知りたいのでしょうか?
内部処理や設計まで知りたいのでしたらphpが作られているC言語のコードを読んできて、という回答になります。
そうでないのでしたら、マニュアルに書いてあるinput/outputのみおさえておけば良い話です。

変数名とその値から配列を作成する
compact ( mixed $varname1 [, mixed $... ] ) : array
パラメータ
varname1
compact() がとるパラメータの数は可変です。 各パラメータは、変数名を値とする文字列か、 変数名の配列のどちらかとすることができます。 配列は、変数名を値とする別の配列を持つことができます。 compact()はこれを再帰的に処理します。
**返り値 **
追加された全ての変数を値とする出力配列を返します。

投稿2019/05/09 04:01

編集2019/05/09 04:19
m.ts10806

総合スコア80850

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

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

m.ts10806

2019/05/09 04:16 編集

これはcompact()に限らない話です。 PHPマニュアル自体にも「関数の定義(プロトタイプ)を読むには」というページが作られているので、そちらも参考にしてください。 https://php.net/manual/ja/about.prototypes.php
toll_tree

2019/05/09 04:23

マニュアルはもちろん読んだのですが、記載されている内容が少し、難しかったんですよね。 ミニマムコードでも、試したのですが、うまくいかなかったもので。
m.ts10806

2019/05/09 04:27

であれば、そのうまくいかなかったミニマムコードをもって質問されたほうが丸投げ感もなく問題課題もはっきりしていたのでは。的確な回答も得られたはずですね。 マニュアルに記載されているサンプルコードもtoll_treeさんのように「説明だけではイメージがわかない」人のためのコードですし。 既に別でも指摘されていますが、何がどうわかって何がどう分からないのか明記されないとteratailとしては非推奨です。
toll_tree

2019/05/09 04:29

そうですね。 そこは、気を付けていきたいと思います
m.ts10806

2019/05/09 04:33

老婆心ながら、何度も同じ指摘をうけられているように思います。 「気を付けたい」(あと謝罪とかも同じですが)言っている間があるなら今この質問を改善していただいたほうが回答者としてはありがたいのです。
toll_tree

2019/05/09 10:58

今からでも、変更した方が良いでしょうか?
m.ts10806

2019/05/09 11:03

解決済みの質問を編集するのは余程のことがない限り避けるべきです。 内容によって要件が変わったような印象となるとついた回答が無駄になるので。 「なるべく質問テンプレートを使って書く」など、(未解決の質問含めて)今後気を付ければ良いのではないでしょうか。 追記修正依頼にはなるべく早めに応えるとスムーズに解決まで流れると思います
guest

0

ベストアンサー

compact()の引数で与えらる「変数名」を
そのスコープ内で存在する変数を探し当て、
変数名をキーに、変数の値を値とした配列に組み上げて
返してくれる関数です。

変数名が存在しない場合には
返される配列にも値が存在しません。

変数名を格納する配列を与えると、
配列内の値を変数名に持つものを探します。

で、なにがどうわからないのか?

旅行に行くのにスーツケースにパッキングするようなイメージですね、わたしは。
jsonやxmlなどの一定の構造体でデータを返答するときに、
返答するデータのパッキングをするのに重宝するのかと。

投稿2019/05/09 04:01

編集2019/05/09 04:03
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

toll_tree

2019/05/09 04:16

ご回答ありがとうございます。 変数名が「キー」となるわけなんですね。 となりますと、「echo json_encode(compact('data'));」ここの一行は、「data」をキーとして、値は、そのまま、変数$dataの値が入る、という理解であっていますでしょうか?
退会済みユーザー

退会済みユーザー

2019/05/09 04:28

ドキュメントにそう書いてあって、 サンプルコードもそういう結果を示していて、 自分のテスト環境でphpコードを書けばわかる話を、安易に他人にお伺いを立てて確認しようとするのでしょうか。 いや違うよって、いたずらで寄せられる回答もあるかもしれないし、 必ずしも正しい回答、不確実な回答もあるかもしれないのだから、 この場はあくまで情報収集にとどめておいて、 自分でミニマルなテストコードを書いて自分の血肉にしていく必要がありますよ。 血肉になったら、自分の解釈としてはこうだよって こういう場で広めていただきたい。 mts10806さんの回答も、調べ方、確かめ方に重きをおいているのは、そういう理由だと察します。
toll_tree

2019/05/09 04:31

確かに、自分のコードで確認するというは大事ですね
退会済みユーザー

退会済みユーザー

2019/05/09 05:19 編集

わたしもただのphpでシステム開発する人間なので、 もしかしたら誤った情報提供をしてしまう可能性もあります。 言葉遣い的に齟齬が生じる可能性もなくもないので、 phpのコードであればまず間違いは起こらないのではないかと、そもそもな話をしてしまいました。 お気に触るようでしたらすみません。→低評価をつけた方
toll_tree

2019/05/09 10:38

自分ももう少し、ミニマムコードなどで試してから、質問するべきでした... 質問をする際は、きちんと調べるなり試してから、質問するようにしたいと思います...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問