Php 如何循环多维数组并相应地执行查询?
现在已经很晚了,所以我想我已经筋疲力尽了,但我已经努力解决这个问题大约一个小时了,我找不到适合我的解决方案。基本上,代码查询数据库以找出游戏中有多少人,然后进行一点数学运算以比较人与人之间的得分。之后,它将使用玩家及其点数唯一的id填充数组。现在的问题是,我正在尝试比较一个数组,它包含了人和他们的积分列表,与一个数组,该数组包含了玩家将根据他们的等级获得的积分。我似乎不知道如何将两个阵列拉到一起并相应地分配点。代码如下:Php 如何循环多维数组并相应地执行查询?,php,mysql,Php,Mysql,现在已经很晚了,所以我想我已经筋疲力尽了,但我已经努力解决这个问题大约一个小时了,我找不到适合我的解决方案。基本上,代码查询数据库以找出游戏中有多少人,然后进行一点数学运算以比较人与人之间的得分。之后,它将使用玩家及其点数唯一的id填充数组。现在的问题是,我正在尝试比较一个数组,它包含了人和他们的积分列表,与一个数组,该数组包含了玩家将根据他们的等级获得的积分。我似乎不知道如何将两个阵列拉到一起并相应地分配点。代码如下: $game_id = 4; //will be replaced late
$game_id = 4; //will be replaced later on, just for testing
$x = 0;
$y = 0;
$point_array = array();
$entrantsquery = mysql_query("SELECT * FROM game_entrants WHERE game_id='$game_id' AND discipline=1");
while($entrantsarray = mysql_fetch_array($entrantsquery , MYSQL_ASSOC)){
$statquery = mysql_query("SELECT * FROM player_stats WHERE player_id={$entrantsarray['player_id']}");
$statarray = mysql_fetch_array($statquery, MYSQL_ASSOC);
$points = $statarray['stat1'] + $statarray['stat2'] + ($statarray['stat3']*2.3) + $statarray['stat4'] + ($statarray['stat5']*2.7);
$point_array[$x][$y] = $entrantsarray['player_id'];
$y++;
$point_array[$x][$y] = $points;
$x++;
$y--;
}
任何帮助都将不胜感激,因为这已经开始让我头痛
编辑:
下面是包含其他数组的代码:
$total_points = 5000;
$distribution_quantity = 25;
$M = $distribution_quantity-1;
$K = ($distribution_quantity * $M) / 2;
$difference = 15;
$award_points = array();
$equation = ($total_points - ($K * $difference))/$distribution_quantity;
for ($z = $distribution_quantity; $z > 0; $z--) {
$award_points[] = $equation = $equation+$difference;
}
foreach ($award_points as $value) {
echo $value. "<br>";
}
$total_points=5000;
$distribution_数量=25;
$M=$U分配数量-1;
$K=($distribution\u quantity*$M)/2;
$difference=15;
$award_points=array();
$equation=($total_points-($K*$difference))/$distribution_quantity;
对于($z=$distribution\u quantity;$z>0;$z--){
$award_points[]=$equation=$equation+$difference;
}
foreach(奖励积分为$value){
回声$value.“
”;
}
最新更新:
我想你误解我了
我有两个数组。第一个数组由用户的唯一ID和匹配点的列表组成。在比赛中得分最多的球员是#1。现在,我的第二个数组携带由25个数字组成的数据。每个数字代表比赛中的排名。1代表最佳球员,25代表最差球员。每个等级都有一组不同的分数,这些分数将被添加到球员的跑步总数中。第一个数组中的点数仅用于确定玩家在比赛中的总体排名
比如说
球员1在一场比赛中得到240分。
玩家2得到180分。
玩家3得到210。
等等等等
这意味着球员1获得了第一名。第三名选手获得第二名。第二名选手获得第三名
现在让我们假设第二个数组如下所示:
1->500
2 -> 300
3->100
玩家1得到500分。
玩家2得到100分。
玩家3得到300分
我希望这能让事情变得更清楚一点。本来会有帮助的,但事情太多了
$users = array();
$users[] = array("id"=>1,"points"=>267);
$users[] = array("id"=>2,"points"=>265);
$users[] = array("id"=>3,"points"=>245);
$ranks = array();
$ranks[] = array("rank"=>1,"points"=>345);
$ranks[] = array("rank"=>2,"points"=>267);
$ranks[] = array("rank"=>3,"points"=>265);
$final = array();
foreach($users as $key => $user)
{
$user['rank'] = 0 ; // Not rancked Yet
foreach ($ranks as $rKey => $rank)
{
//var_dump($rank);
if($user['points'] >= $rank['points'])
{
$user['rank'] = $rank['rank'] ;
}
}
$final[$key] = $user ;
}
var_dump($users,$final);
输出
// Users Before
array
0 =>
array
'id' => int 1
'points' => int 267
1 =>
array
'id' => int 2
'points' => int 265
2 =>
array
'id' => int 3
'points' => int 245
// Users After
array
0 =>
array
'id' => int 1
'points' => int 267
'rank' => int 3
1 =>
array
'id' => int 2
'points' => int 265
'rank' => int 3
2 =>
array
'id' => int 3
'points' => int 245
'rank' => int 0
谢谢
:)我要做的是对当前点的数组进行排序,以便;s按秩排序,然后在每个数组中循环,将新点添加到当前点。查看此处了解如何 所以 $currentPoints现在应包含更新后的积分总数
只要稍加努力,您可能会使每个数组成为一个简单的一维数组,从而使排序等更容易。我认为更改$award_points的结构可能会有所帮助,这样分数就是关键,排名就是价值
array {
345 => 1,
267 => 2,
265 => 3,
.
.
}
现在,您可以简单地在$point_数组中循环,并从$award_points中获取相应的排名
foreach ($point_array as $key => $arr) {
$point_array[$key]['rank'] = $award_points[$arr['points']]
}
print_r($point_array);
我还没有测试代码,但我认为它应该可以工作
根据问题的最新更新进行编辑
首先,让我们修改填充$point_数组的代码,如下所示:
$game_id = 4; //will be replaced later on, just for testing
$point_array = array();
$entrantsquery = mysql_query("SELECT * FROM game_entrants WHERE game_id='$game_id' AND discipline=1");
while($entrantsarray = mysql_fetch_array($entrantsquery , MYSQL_ASSOC)){
$statquery = mysql_query("SELECT * FROM player_stats WHERE player_id={$entrantsarray['player_id']}");
$statarray = mysql_fetch_array($statquery, MYSQL_ASSOC);
$points = $statarray['stat1'] + $statarray['stat2'] + ($statarray['stat3']*2.3) + $statarray['stat4'] + ($statarray['stat5']*2.7);
$point_array[$entrantsarray['player_id']] = $points;
}
arsort($point_array);
最后请注意arsort()方法。这将为$point_数组提供以下结构(基于最新更新的示例),并按其点的降序排列:
$point_array = Array (
1 => 240,
3 => 210,
2 => 180
)
现在,假设$award_points具有以下结构:
$award_points = Array (
1 => 500,
2 => 300,
3 => 100
)
下面的代码现在应该为您提供所需的结果集,即根据玩家获得的排名将奖励点数添加到玩家获得的分数中
$prev_player_point = 0;
$read_rank = 0;
foreach ($point_array as $player_id => $player_point) {
if ($player_point != $prev_player_point) {
++$read_rank;
}
$new_point_array[$player_id] = $player_point + $award_points[$read_rank];
$prev_player_point = $player_point;
}
print_r($new_point_array);
我希望我理解了您的需求,并且上述内容很有意义。那么这里的主要问题是什么?哪一行?我只需要获得$point_数组的帮助,该数组包含一个玩家列表和他们的统计数据积累,并将其与$award_点数进行比较。共有25名球员,他们的排名各不相同:1名是最好的,25名是最差的。$award_points数组包含25个数字的列表。我需要$point_数组中的玩家获得奖励,无论他们获得的排名有多少积分,这些数字都保存在$point_points1中。我没用过两次?2.它用玩家及其点数填充第一个数组。3.问题是如何让第二个数组与第一个数组进行交互。非常感谢,很抱歉一开始让人难以理解。没问题@NickSavage,也许我没能很好地理解它。很好,它现在起作用了:-)
$award_points = Array (
1 => 500,
2 => 300,
3 => 100
)
$prev_player_point = 0;
$read_rank = 0;
foreach ($point_array as $player_id => $player_point) {
if ($player_point != $prev_player_point) {
++$read_rank;
}
$new_point_array[$player_id] = $player_point + $award_points[$read_rank];
$prev_player_point = $player_point;
}
print_r($new_point_array);