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

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

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

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

3回答

5287閲覧

三角形の面積を求める関数を作りたい。

Chelsea_10

総合スコア46

PHP

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2016/03/10 05:44

三角形の面積を求める関数を作りたい。
引数は1つ目が底辺(数値)、2つめが高さ(数値)で、戻り値で面積を返す関数 これの複数対応を行いたいです。 引数でarray(array(底辺,高さ),array(底辺,高さ),・・・)な感じの配列を渡して、 それぞれ面積を計算して配列array(result1,result2,・・・)で返す。 渡される引数の配列の要素数は可変という形で行う方法をご教授ください。

現状、下記のように答えを配列内に格納することに成功しているのですが、
array(array(底辺,高さ),array(底辺,高さ),・・・)の部分ができていなくて困っています。

初心者で申し訳ございませんが、
ご教授いただけますと助かります。

何卒宜しくお願い申し上げます。

php

1function menseki ($width,$height) { 2 $result = array(); 3 4 $result[] = $width * $height / 2; 5 foreach($result as $value) { 6 $ret[] = $value; 7 } 8 return $ret; 9 } 10 11$hensu = menseki(10,20); 12 var_dump($hensu2); 13//array(1) { [0]=> int(100) }

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

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

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

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

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

guest

回答3

0

array_mapを使うと、配列の各要素に対して、同じ処理を行って、その結果を配列として返します。

php

1$results = array_map(function($pair){ 2 //$pair[0]が底辺、$pair[1]が高さ(どっちでも一緒だけど) 3 return $pair[0] * $pair[1] / 2; 4}, $pairs);

必要なら、array_map(...);を関数に詰めても大丈夫です。

投稿2016/03/10 05:57

maisumakun

総合スコア145121

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

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

Chelsea_10

2016/03/10 06:20

ご回答ありがとうございます! ただ、var_dump($result)とやるとエラーになってしまっていて。。。 やり方がちがうんですかね。。。(._.) また自分で記述したコードのやり方でやるならば、どのように記述したらいいか合わせてお答えいただけますと大変助かります。。。 ご多忙野中申し訳ございません(T_T)
dupont_kedama

2016/03/10 06:55 編集

質問文の後半部分、var_dump($hensu2);は $hensu2 が存在していないのでエラーになりますよ。
guest

0

「引数を2つ使ったパターン」とはこういうことですか?

php

1function triangle_area($width, $height) { 2 return $width * $height / 2; 3} 4 5$definitions = [ 6 [100, 200], 7 [200, 200], 8 [200, 400], 9]; 10 11$areas = array_map(function ($definition) { 12 return triangle_area(...$definition); 13}, $definitions);

それかこういうことでしょうか?

php

1function triangle_area($width, $height) { 2 return $width * $height / 2; 3} 4 5$widths = [100, 200, 200]; 6$heights = [200, 200, 400]; 7 8$areas = array_map('triangle_area', $widths, $heights);

投稿2016/03/10 07:40

編集2016/03/10 07:42
mpyw

総合スコア5223

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

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

Chelsea_10

2016/03/12 09:33

2番目のやつがそうです!! ありがとうございます!
guest

0

ベストアンサー

関数でやりたければ引数を1つにして以下のように書けばよろしいかと。
array_mapを使うパターンとforeachで回すパターンを書いてみました。

PHP

1// array_mapを使うパターン 2function menseki(array $triangles) { 3 $result = array_map(function($triangle){ 4 return $triangle[0] * $triangle[1] / 2; 5 }, $triangles); 6 return $result; 7} 8 9// foreachで回すパターン 10function menseki2(array $triangles) { 11 $result = array(); 12 foreach($triangles as $triangle) { 13 $result[] = $triangle[0] * $triangle[1] / 2; 14 } 15 return $result; 16} 17 18$triangles = array( 19 array(100,200), 20 array(200,200), 21 array(200,400), 22); 23 24echo '<pre>'; 25var_dump(menseki($triangles)); 26var_dump(menseki2($triangles)); 27echo '</pre>';

投稿2016/03/10 07:00

編集2016/03/10 07:04
dupont_kedama

総合スコア925

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

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

Chelsea_10

2016/03/10 07:09

そんな方法があったんですね!! 2つのパターンもつくっていただきありがとうございます! ちなみになんですが、 手間かもしれませんが、引数を2つ使ったパターンでやるならばどのように記述すればよろしいのでしょうか。。。 初歩的な質問かもしれませんがお答えいただけますと助かります。。。
dupont_kedama

2016/03/10 07:24

「引数を2つ(底辺、高さ)」の関数が配列全体の答えを返す設計はわかりづらいのでやらない方がよいですよ。 「引数を2つ使った」関数がその引数を使った計算をするだけなら、上記の「$triangle[0] * $triangle[1] / 2」の部分だけ別の関数に切り出せばよいです。 その関数が返すのは一つの答えであって、配列ではありません。 というコメントで答えになってますでしょうか・・・
Chelsea_10

2016/03/12 09:34

ご返答おくれてしまい大変申し訳ございません。 なるほど。。。 たしかにそちらのほうがわかりやすいですよね。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問