0

基本的に、これは 2 つのスコアを持つスカッシュ アプリケーションに関連しています。1 つは勝者の視点から、もう 1 つは敗者の視点からです。

例えば。Score1: 11-5,11-5,11-5 (勝者の視点) Score2: 5-11, 5-11,5-11 (敗者の視点)

今、私のロジックでは、勝者のスコアと敗者のスコアを見つけたいと思っています。

私は以下の方法でロジックを書きましたが、うまくいきます。しかし、これを書くための他のより良い/最適化された方法があるかどうか知りたいです。

$high1 = 0;
$high2 = 0;

$score1 = "2-11,5-11,4-11,4-4";
$score2 = "11-2,11-5,11-4,4-4";

$score1Array = explode(",",$score1);

$size = sizeof($score1Array);

for($i = 0; $i < $size; $i++) {

$checkscore1 = explode("-",$score1Array[$i]);


if($checkscore1[0] < $checkscore1[1]) {

    $high1++;

}else if($checkscore1[0] > $checkscore1[1]) {

    $high2++;

}


}

if($high1 > $high2) {

$winningScore = $score2;
$losingScore = $score1;
}else{

$winningScore = $score1;
$losingScore = $score2;
}

echo $winningscore;
echo $losingscore;
4

4 に答える 4

1

このようなものはどうですか:

function is_winning($score) {

  $split_scores = preg_split('/(-|,)/', $score);
  $wins = $losses = 0;

  for($i = 0; $i < count($split_scores) / 2; $i += 2) {
    if($split_scores[$i] > $split_scores[$i + 1])
      $wins++;
    if($split_scores[$i] < $split_scores[$i + 1])
      $losses++;
  }

  return $wins > $losses;

}

$scoreあなたの質問のようにフォーマットされていると仮定します。その後、次のように使用できます。

$score1 = "2-11,5-11,4-11,4-4";
$score2 = "11-2,11-5,11-4,4-4";

if(is_winning($score1)) {
  $winning_score = $score1;
  $losing_score = $score2;
} else {
  $winning_score = $score2;
  $losing_score = $score1;
}

echo $winning_score;
echo $losing_score;

アイデアは、偶数番号のインデックスが左のスコアを持ち、奇数番号のインデックスが右のスコアを持つ配列にスコアを分割することです。次に、勝った回数と負けた回数を数えます。勝者が敗者よりも多い場合、スコアは勝利スコアであるため、true を返します。勝敗がそれ以上ない場合は、単純に false を返します。

于 2012-10-17T05:08:32.757 に答える
0

勝者の観点からは、すべての大きなスコアが左に、そうでない場合は右にあります。したがって、uは最初のスコアを検出できます。

$score1Array = explode(",",$score1);
$checkscore1 = explode("-",$score1Array[$i]);
if($checkscore1[0] < $checkscore1[1]) {
    echo $score2;
    echo $score1;
}else{
    echo $score1;
    echo $score2;
}

修正:上記のコードが間違っている場合は、これを試してください:

$score1value = eval(str_replace(",","+",$score1));
$score2value = eval(str_replace(",","+",$score2));

if($score1value < $score2value) {
    echo $score2;
    echo $score1;
}else{
    echo $score1;
    echo $score2;
}
于 2012-10-17T05:01:12.827 に答える
0

これはうまくいくはずです

$score1 = "2-11,5-11,4-11,4-4";
$score2 = "11-2,11-5,11-4,4-4";
$l = $r = 0;

$score1_sets_arr = explode(',', $score1);
foreach ($score1_sets_arr as $set_score) {
  $set_score_arr = explode('-', $set_score);
  if ($set_score_arr[0] > $set_score_arr[1]) {
    $l++;
  } else {
    $r++;
  }
}

if ($l > $r) {
  $winning_score = $score1;
  $losing_score  = $score2;
} else {
  $winning_score = $score2;
  $losing_score  = $score1;
}
于 2012-10-17T06:00:57.440 に答える
0

これを使用できます:

<?php
$high1 = 0;
$high2 = 0;

$score1 = "2-11,5-11,4-11,4-4";
$score2 = "11-2,11-5,11-4,4-4";

$explode = explode(",",$score1);


for($i=0;$i<  sizeof($explode);$i++){
    $explode2= explode("-", $explode[$i]);
    if($explode2[0] <= $explode2[1]){
        echo $explode2[0]."-";
        echo $explode2[1]." ";
    }

}
echo "<br />";
for($i=0;$i<  sizeof($explode);$i++){
    $explode2= explode("-", $explode[$i]);
    if($explode2[1] >= $explode2[0]){
        echo $explode2[1]."-";
        echo $explode2[0]." ";
    }

}

?>
于 2012-10-17T06:14:05.293 に答える