基本上,这与我们有2分的壁球应用程序有关。一种是从赢家的角度出发,另一种是从失败者的角度出发。
例如: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;
发布于 2012-10-17 13:08:33
下面这样的内容如何:
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-17 13:01:13
对于获胜者的观点,所有的大分数都在左边,否则在右边。所以你只能检测到第一个分数。
$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-17 14:00:57
这应该是可行的
$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;
}
https://stackoverflow.com/questions/12927366
复制相似问题