PHPプログラミング


$a=20;
$b=10;
$c=30;

$a,$b,$cのうちどれが一番最小かを求めたいとき
if($a<$b){
 if($a<$c){
  echo("Aが最小");
 }else{
  if($c<$b){
   echo("$cが最小");
  }else{
   echo("$bが最小");
  }
 }
}else{
(省略)

}

のような方法しか思いつかないのですがもっと簡単に(関数1行とかで)求めることはできるでしょうか

回答の条件
  • 1人5回まで
  • 登録:2008/06/06 01:42:50
  • 終了:2008/06/06 20:37:04

回答(6件)

id:pirokyun No.1

pirokyun回答回数2ベストアンサー獲得回数02008/06/06 02:02:44

ポイント10pt

$array = array(10, 30, 20);

sort($array);

echo $array[0];

?>

すぐ思いついたのはこんな感じです。

id:dedara

回答ありがとうございます。

説明がわかりづらかったかもしれませんが

変数$a、$b、$cをくらべて最小の値が入ってる変数は3つのうちどれか、

というのを知りたいのです。

単純に3つの値(10、20、30)の最小値を知りたいのではありません

2008/06/06 02:08:59
id:ftns No.2

ftns回答回数153ベストアンサー獲得回数162008/06/06 02:06:26

ポイント20pt

最小値を求めるなら、min()が使えます。

http://jp2.php.net/manual/ja/function.min.php

しかし「最小の値を持っている変数はどれか?」を知りたい場合は、お考えの通りに比較するしかありません。

id:dedara

まさに「最小の値を持っている変数はどれか?」を知りたいのですが

やっぱり方法はないのでしょうか。

3つの変数をくらべるならまだいいのですが

これが4つ5つとなってくるとひどい分岐になってきます

2008/06/06 02:11:52
id:pirokyun No.3

pirokyun回答回数2ベストアンサー獲得回数02008/06/06 02:45:54

ポイント30pt
<?php

$a=20;
$b=10;
$c=30;

$array = compact("a", "b", "c");

asort($array);

$res = array_search(current($array), $array);

echo '$' . $res .'が最小';

?>

min()忘れてた!!

う~ん。ごりごりの力押しですが・・・いかがでしょう・・・。

もっといい方法あるかもしれませんが思いつきませーんorz

id:dedara

pirokyunさんの最初の回答を見たとき連想配列にする方法がなんとなく頭に浮かんだのですが、これはそんな感じです。

compact関数は知りませんでした。

2008/06/06 07:51:58
id:kn1967 No.4

kn1967回答回数2915ベストアンサー獲得回数3012008/06/06 04:34:25

ポイント10pt

案1:最小値を求めて、最小値に相当するキーを取得する方法

$a=20;
$b=10;
$c=30;

$array = array("a" => $a, "b" => $b, "c" => $c); // 連想配列化
$min = min($array); // 最小値を求める
echo array_search($min,$array); // 求めた最小値に該当する要素を求めてキーを出力

案2:並び替えを行って最初のキーを取得する方法

$a=20;
$b=10;
$c=30;

$array = array("a" => $a, "b" => $b, "c" => $c); // 連想配列化
asort($array); // 昇順で並び替え
echo key($array); // 最初の要素のキーを出力

以上のような感じで連想配列を用いてはいかがでしょう?

id:dedara

回答ありがとうございます。pyonkunさんの回答に近いですね。

やっぱり連想配列ですかね

2008/06/06 07:48:20
id:KeyKey No.5

KeyKey回答回数29ベストアンサー獲得回数42008/06/06 06:06:02

ポイント30pt

三項演算子を使って無理やり1行に

echo (($a < $b) ? ($a < $c) : false) ? 'a' : (($b < $c) ? 'b' : 'c');

ちなみにperlや他の言語で実装するなら

print (($a < $b) ? ($a < $c) : false) ? 'a' : ($b < $c) ? 'b' : 'c';

こんな感じになる

id:dedara

こんな方法もあるのかあ

三項演算子使ったことがありませんでしたがいいですね

回答ありがとうございます

2008/06/06 07:51:34
id:pahoo No.6

pahoo回答回数5960ベストアンサー獲得回数6332008/06/06 08:43:07

ポイント10pt

連想配列+並べ替えしない方式です。

$a = 20;
$b = 10;
$c = 30;
$arr = compact('a', 'b', 'c');
$key = array_search(min($arr), $arr);
echo '$' . $key . 'が最小';
id:dedara

なんとなく出切った感じがしますね

ありがとうございました

2008/06/06 20:33:28

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません