PHP Reward 指向排行榜并占领带

标签 php arrays multidimensional-array leaderboard reward-system

好吧,我已经为这个问题苦苦思索了一段时间,谷歌搜索试图找到任何可以引导我走向正确方向的东西,但都无济于事。

所以我有一个这样的排名排行榜数组:

[1] = array('points' => '99', 'rank' => '1');
[2] = array('points' => '90', 'rank' => '2');
[3] = array('points' => '90', 'rank' => '2');
[4] = array('points' => '80', 'rank' => '4');
[5] = array('points' => '70', 'rank' => '5');
[6] = array('points' => '70', 'rank' => '5');

然后我有一个奖励积分系统,它有一个预定义的数组来根据排名奖励积分:

[1]=10;
[2]=9;
[3]=8;
[4]=7;
[5]=6;
[6]=5;

如果不是平局,我只会匹配两个数组并根据数组键奖励积分。但是,由于我允许绑定(bind),所以我试图在所有绑定(bind)用户之间分配绑定(bind)奖励积分。因此,根据上面的引用资料,并列第二的玩家 2 和 3 将平分奖励点数 9 和 8...因此两人都将获得 8.5 分。

所以我在合并两个数组时要寻找的最终结果是:

[1] = array('points' => '99', 'rank' => '1', 'reward' => '10');
[2] = array('points' => '90', 'rank' => '2', 'reward' => '8.5');
[3] = array('points' => '90', 'rank' => '2', 'reward' => '8.5');
[4] = array('points' => '80', 'rank' => '4', 'reward' => '7');
[5] = array('points' => '70', 'rank' => '5', 'reward' => '5.5');
[6] = array('points' => '70', 'rank' => '5', 'reward' => '5.5');

排行榜可以不断变化,直到一天结束,所以我尽量不要让它太复杂。我只是想知道是否有人可以指出他们看到的可以帮助我的东西,或者他们是否有任何实现想法。

在我的尝试中,我最纠结的部分是遍历排行榜数组并不断期待“排名”相同,然后知道我需要总结和拆分的内容,同时知道我可以跳过前面的数组,而不是对我刚刚在前瞻中经历的下一个项目执行相同的测试。对不起,如果我感到困惑,但我显然很困惑。

最佳答案

这可能是您想要的:

代码

$persons = array(
    array('points' => '99', 'rank' => '1'),
    array('points' => '90', 'rank' => '2'),
    array('points' => '90', 'rank' => '2'),
    array('points' => '80', 'rank' => '4'),
    array('points' => '70', 'rank' => '5'),
    array('points' => '70', 'rank' => '5')
);

$ranks = array(
    1 => 10,
    2 => 9,
    3 => 8,
    4 => 7,
    5 => 6,
    6 => 5
);

foreach($persons as $person => $prop) {
    $reward = $ranks[$prop['rank']];

    if (isset($persons[$person+1])) {
        if ($persons[$person+1]['rank'] == $prop['rank']) {
            $reward = $reward - 0.5;
        }
    }

    if (isset($persons[$person-1])) {
        if ($persons[$person-1]['rank'] == $prop['rank']) {
            $reward = $reward - 0.5;
        }
    }

    $persons[$person]['reward'] = $reward;
}

echo '<pre>';
print_r($persons);
echo '<pre>';

此处发生的事情是您创建奖励键并根据 $ranks 数组中的索引用此人的等级填充它。这个例子并不安全。您可能想先检查该键是否存在于 $ranks 数组中。

这个例子非常“原始”,可能没有不同排名的缺陷,所以你必须自己做最后的测试。

输出

Array
(
    [0] => Array
        (
            [points] => 99
            [rank] => 1
            [reward] => 10
        )

    [1] => Array
        (
            [points] => 90
            [rank] => 2
            [reward] => 8.5
        )

    [2] => Array
        (
            [points] => 90
            [rank] => 2
            [reward] => 8.5
        )

    [3] => Array
        (
            [points] => 80
            [rank] => 4
            [reward] => 7
        )

    [4] => Array
        (
            [points] => 70
            [rank] => 5
            [reward] => 5.5
        )

    [5] => Array
        (
            [points] => 70
            [rank] => 5
            [reward] => 5.5
        )

)

关于PHP Reward 指向排行榜并占领带,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15644763/

相关文章:

javascript - 如何通过codemirror为页面制作php预览功能

Java 程序使用未经检查或不安全的操作

python - pandas 导出一个向量并将其形状更改为一维数组

python - 为什么 numpy 混合基本/高级索引取决于切片邻接?

php - 使用 CSS 时 Dropmenu 不起作用

php - MySql,3个表,需要使用主表中的ID的所有列

php - $_SERVER ['REQUEST_URI' ] 返回完整的 URL 而不是脚本路径

Javascript - 对对象进行分组和排序

更改我传递给函数而不用 C 中的 Return 的数组

java - 逐列打印二维数组