• ベストアンサー

if()に関して

yousuckmoreの回答

回答No.2

minという関数の中で、配列$kの要素の最小値を取得したいということでしょうか。 phpの関数である「min」という関数ではそういった機能はないため、 自作するしかないと思います。 どういった関数が作りたいのか詳しいことが分からないので、 推測になってしまいますが、  a. $kを降順でソートする(sort関数)。  b. for文で配列の値を順番に走査していき、-1が出てきたら、以下の様に分ける。   b-1. 現在より1つ前のキーから値を取得できたら、その値を返す。      (降順にソートしているため、1つ前の値は-1の次に小さいから)   b-2. 現在より1つ後のキーから値を取得できたら、その値を返す。      (降順にソートしているため、1つ後の値は-1の次に大きいから)   b-3. それ以外の場合は-1しか存在しない配列なので、-1を返す。  c. 配列$kに-1という値が見つからなかった場合は、配列の0番目を返す。    (降順にソートしているため、0番目が最小値のから) という感じでしょうか。 以下にサンプルを作成しましたので参考にしてみて下さい。 <?php   //ケース1:-1より小さい値がある場合   // →-1の次に小さい値を選択する   $k1 = array(-10, -2, 1, -1, -5, 5, -3, 10, -8);      //ケース2:-1が最小の場合   // →-1の次に大きい値を選択する   $k2 = array(3, -1, 1, 10, 4);      //ケース3:-1が無い場合   // →最小値を選択する   $k3 = array(10, 4, -3, 5, -2, 2);      //ケース4:-1しか無い場合   // →-1を選択する   $k4 = array(-1);   $Answer1 = Minimum($k1); //-2   $Answer2 = Minimum($k2); //1   $Answer3 = Minimum($k3); //-3   $Answer4 = Minimum($k4); //-1 function Minimum($k) {   sort($k);   for($i = 0; $i < count($k); $i++)   {     if($k[$i] == -1)     {       if(isset($k[$i - 1]))       {         return $k[$i - 1];       }       elseif(isset($k[$i + 1]))       {         return $k[$i + 1];       }       else       {         return -1;       }     }   }   return $k[0]; } ?>

drmada
質問者

お礼

詳しい回答ありがとうございます。試してみます。

関連するQ&A

  • ソート

    お世話になります。配列のソートなのですが、どうも思い通りの結果になりません。 配列の中から最大値と最小値を探し、最小値を配列0に、最大値を配列の最後に移動します。その2つ以外の数字の順番は変えません。 例) {4,3,2,0,1,2} 最小値は0、最大値は4なので→{0,3,2,1,2,4} {4,3,2,1} → {1,3,2,4} {1,3,2,4,} → {1,3,2,4} 流れとしては、まず最小値を求め配列0に移動させ、次に最大値を求め配列の最後に移動させようと思います。 プログラムは以下のように組みました。 public int[] sortOfSort(int[] array) { int count_min = 0; int min = array[0]; for (int i = 0; i < array.length-1; i++) { // 最小値を求める if (min > array[i + 1]) { min = array[i + 1]; count_min++; // 最小値の配列のインデックスを確保 } } for (int k = count_min; k > 0; k--) { // 最小値の移動 int temp_min = array[k - 1]; array[k - 1] = array[k]; array[k] = temp_min; } int count_max = 0; int max = array[0]; for (int j = 0; j < array.length-1; j++) { // 最大値を求める if (max < array[j + 1]) { max = array[j + 1]; count_max++; // 最大値の配列のインデックスを確保 } } for (int l = count_max; l < array.length-1; l++) { //最大値の移動 int temp_max = array[l + 1]; array[l + 1] = array[l]; array[l] = temp_max; } return array; } 間違っているところがわかりましたら宜しくお願いします。

    • ベストアンサー
    • Java
  • IF関数とMIN

    B1のセルに20以上の数字が入力された場合、C1にIF(AND~)と関数を入力し20までにしかならないようにしました。 そして、D1のセルにはB1とC1の小さいほうの数字が自動的に入るようにしたいのですが、MIN(B1:C1)としてもB1の数字しか反映されません。 説明がわかりにくいとは思いますが、解決法をお願いします。

  • IF関数の空白セルの扱いについて

    関数にあまり詳しくないので、教えてください。 セルA1からH1に入力された数値の「最大値が8以上」または 「最小値が3以下」の場合は○、それ以外は空白としたいのですが、 「=IF(OR(7<MAX(A1:H1),4>MIN(A1:H1)),"○","")」だと、 範囲内のすべてのセルが空白の場合は最小値を0とみているのか「○」となってしまいます。 空白セル=0としないようにするには、どうしたらよいでしょうか?

  • Ms-Excelの関数について

    Ms-Excelの関数について ---------------------- 90 6 6 10 0 3 80 1 2 99 2 9 ---------- =VLOOKUP(MIN(A1:A4),A1:C4,3,0)(←答えは3) ------------------------ このようになると思いますが、 最小ではなく、最小から2番目のもの(80の、行の答えである2)を選び出したいのですがどうすればいいでしょうか? よろしくお願いいたします。 また、もし、可能でしたら、同順位の場合(A:Aに、同じ数字が来た場合)、行番号の大きいデータの優先が出来ればなお助かります。 ご返答何卒、よろしくお願いいたします。

  • 有効数字の桁数が違う場合のプラス1桁の出し方

    有効数字の桁数がそろわない場合の掛け算・割り算は途中の計算は有効数字の桁数の最小のものプラス1桁で計算し、最後に四捨五入で有効数字の桁数の最小のものにあわせると書いてあります。次の場合、どちらが適当な計算といえるのでしょうか。( )内は最終的に有効数字の桁数の最小のものに四捨五入して桁数を合わせて出した答えです。 ア.2.5×1.456=2.5×1.45 (3.6) イ.2.5×1.456=2.5×1.46 (3.7) また、次の場合はどうでしょうか。(最終的に有効数字の桁数は2桁とします) ウ.x^2=2.456 x=√2.45 (x=1.6) エ.x^2=2.456 x=√2.46 (x=1.7) 結局、最終的な有効数字の桁数の次の次の位の数字を四捨五入すべきなのかそれとも意味があまりないので捨てるべきなのか分らないのです。 悩んでいますので、どなたか教えていただけないでしょうか。よろしくお願いいたします。

  • IF関数について・・・

    A1のセルに数字を入力したら B1のセルに次の表示されるようにしたい場合 IF関数をどのように使えば良いか教えて下さい。 「○○○A1○○○」    *○は文字でA1は数値です。

  • ExcelのMINとMAXを下から(上から)2つ出したい。

    エクセルの集計表にて、 右端に合計と平均を出していて そこに最大値と最小値を付け足したいのですが とりあえず、 =MAX(A1:K1)や=MIN(A1:K1)で最大&最小を出す事は出来たのですが、 2番目に大きい数値、2番目に小さい数値を出すにはどうすれば 良いのでしょうか? 教えて下さい。宜しくお願い致します。

  • 【機械図面】 最大値・最小値はどう表現するの?

    タイトルの通りです。 例えば寸法線として、50mmを「最小値」としたい場合、 下記のような表現は可能なのでしょうか?(どれが良い表現でしょうか?) (1)”50 Min.”もしくは”50 最小” (2)”Min.50” もしくは”最小 50” (3)公差で表現する(例えば+10/-0) (4)その他 見やすさの観点から、できれば(3)は避けたいと考えています。 手元にJIS等のハンドブックがないため、お尋ねします。 アホな質問かと思いますが、宜しくお願いします。

  • 表計算ソフトカルクでゼロ以外の最小値の求め方

    宜しくお願い致します。 オープンオフィスカルクで仮にセルA1からA10に0(ゼロ)から9までの数字が入っていた場合の最小値を求める場合に関数 =MIN(A1:A10) ですと0(ゼロ)が検出されますが、0(ゼロ)以外の最小値(この場合は1)を求める関数(方法)が有りましたらご教示お願いいたします。 私なりにいろいろ調べたところカルクで求める方法は見つからなかったのですが、マイクロソフトのエクセルの場合の関数は見つかったので、カルクで同じ関数を入力したところエラーとなって上手く行きませんでした。1以上の最小値を求める場合はカルクとエクセルで違うのでしょうか。私の入力に間違いでも有るのでしょうか。 OSはwindows8.1 OpenOfficeはVer4.1.1を使っております。

  • 《エクセル2000》配列数式とMIN関数を使い、最小値を出したいのですが

    いつもお世話になっております。 配列数式とMIN関数を使って最小値を出す作業をしていますが、最小値は0.3なのに0.0と返って来てしまいます。 条件は「A列が1で、B列が数字だったら」なのですが、B列には空白も入っています。 B列の空白のセルは、ISNUMBER関数でチェックするとFALSEが返ってくるのですが、もしや空白を0とみなしているのでしょうか。 COUNTIFのMIN版と言いますか、条件つきで最小値を出せる関数があればいいのですが…原因と対策をご存じの方、どうかご教示を。