- ベストアンサー
if()に関して
$min = min($k); $kの最小値が-1の場合は排除し、その次に小さい数字を取り出すようにするには、どうしたら良いですか??
- みんなの回答 (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; ?>
その他の回答 (2)
- yousuckmore
- ベストアンサー率80% (4/5)
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]; } ?>
お礼
詳しい回答ありがとうございます。試してみます。
- yambejp
- ベストアンサー率51% (3827/7415)
直接そのような関数は見当たらないのでこんな感じで <?PHP $k=array(2,-1,-1,-1,3); $temp=$k; while(min($temp)==-1) unset($temp[array_search(-1,$temp)]); print min($temp); ?>
お礼
寝ていました。いつも回答ありがとうございます。試してみますm(_ _)m