• ベストアンサー

if()に関して

$min = min($k); $kの最小値が-1の場合は排除し、その次に小さい数字を取り出すようにするには、どうしたら良いですか??

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

そか、すべてが-1の可能性もありましたね <?PHP $k=array(-1,-1,-1); $temp=$k; while(count($temp)>0 and min($temp)==-1) unset($temp[array_search(-1,$temp)]); print count($temp)>0?min($temp):NULL; ?>

drmada
質問者

お礼

寝ていました。いつも回答ありがとうございます。試してみますm(_ _)m

その他の回答 (2)

回答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
質問者

お礼

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

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

直接そのような関数は見当たらないのでこんな感じで <?PHP $k=array(2,-1,-1,-1,3); $temp=$k; while(min($temp)==-1) unset($temp[array_search(-1,$temp)]); print min($temp); ?>

関連するQ&A

専門家に質問してみよう