2

問題:

$ recordに設定されている値があります(例:1.69)。次に、さまざまなグレードと値を含む配列があります。最初に$recordを最大値と比較して、それが高いか等しいかどうか、そうでない場合はその下の値に移動するかどうかなどを確認したいと思います。

PHPコード:

$record1 = '1.69';
$record2 = '2.90';
$record3 = '3.40';
$record4 = '3.80';

配列($ grades):

Array
(
    [G] => 2.8
    [VG] => 3.8
)

シナリオ:

$ record1は、配列の最大値と比較する必要があります。これにより、falseが返されます。最高値より下の値と比較され、これもfalseを返します。両方がfalseを返す場合は、文字列'U'を返します。それ以外の場合は、キーGまたはVGを返します。

  • レコード1はUを生成するはずです。
  • レコード2はGを生成するはずです。
  • レコード3はGを生成するはずです。
  • レコード4はVGを生成するはずです。

質問:

解決策として多くのifステートメントを実行できますが、このチェックをより良い方法で実行するための賢い方法があるかどうか疑問に思います。

4

4 に答える 4

1

配列をループし$grades、結果の値を設定し、値が入力より大きくなるとすぐに中断する関数を記述します。

このようなもの(テストされていない):

function returnGrade($record, $grades)
{
  $return = 'U';
  foreach  ($grades as $key => $value)
  {
    if ($record >= $value)
    {
      $return = $key;
    }
    else
    {
      break;
    }
  }
  return $return;
}
于 2012-06-12T18:33:10.277 に答える
1

まず、配列を降順で並べ替えてみてください。

次に、whileループで、最初の配列要素(key()関数を使用)が大きいか小さいかを確認します。FALSEの場合は、next()関数を使用して次の要素に移動し、それを比較します。

目的の比較がTRUEを返すと、ループは終了します。

于 2012-06-12T18:36:11.740 に答える
1

単純なロジックの使用:

$grades  = array('G' => 2.8, 'VG' => 3.8);
$records = array(1.69, 2.9, 3.4, 3.8);

foreach ($records as $v) {
    $res = ($v < $grades['G'] ? 'U' : ($v < $grades['VG'] ? 'G' : 'VG'));
    echo "$v = $res\n";
}

/*
1.69 = U
2.9 = G
3.4 = G
3.8 = VG
*/
于 2012-06-12T18:36:46.120 に答える
0

あなたはこのようにすることができます

最初にレコード数でループ内をローテーションし、この関数によって値が配列内にあるかどうかを確認しますin_array()

結果が見つかった場合は、この関数でキーを取得しますarray_search("value_to_search","array_variable");

これがあなたのお役に立てば幸いです

于 2012-06-12T18:36:40.680 に答える