Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Friends highscore:合并两个数组_Php_Arrays_Facebook_Multidimensional Array - Fatal编程技术网

Php Friends highscore:合并两个数组

Php Friends highscore:合并两个数组,php,arrays,facebook,multidimensional-array,Php,Arrays,Facebook,Multidimensional Array,我正在Facebook上开发一款游戏,希望向用户展示一个好友高分。 最有效的方法是什么 我有两个阵列: 第一个,来自我的数据库的,$all,保存了玩游戏的所有用户的fbid和分数: Array ( [0] => Array ( [uid] => 12345 [score] => 0 [endgame] => 1404316845 ) [1] =>

我正在Facebook上开发一款游戏,希望向用户展示一个好友高分。 最有效的方法是什么

我有两个阵列:

第一个,来自我的数据库的,
$all
,保存了玩游戏的所有用户的fbid和分数:

Array
(
    [0] => Array
        (
            [uid] => 12345
            [score] => 0
            [endgame] => 1404316845
        )

    [1] => Array
        (
            [uid] => 112873
            [score] => 0
            [endgame] => 1404334512
        )
    ...
)
第二个是来自Facebook的
$friends
,包含用户的所有好友:

Array
(
    [0] => Array
        (
            [uid] => 12345
            [name] => Some Name
            [pic_square] => https://...
        )

    [1] => Array
        (
            [uid] => 43324324
            [name] => Another Name
            [pic_square] => https://...
        )

    [2] => Array
        (
            [uid] => 4893424242
            [name] => Yet Another
            [pic_square] => https://...
        )
    ...
)
我认为这里首选的方法是生成一个新数组,其中只包含玩过游戏并有分数的朋友,如下所示:

Array
(
    [0] => Array
        (
            [uid] => 12345
            [name] => Some Name
            [pic_square] => https://...
            [score] => 0
            [endgame] => 1404316845
        )
    ...
)

我用数组中的
尝试了各种方法,但都做不好。。。有谁能帮我吗?

为分数创建一个新数组,该数组由
uid
索引

$indexedScores = [];

foreach($all as $score) {
    $indexedScores[$score['uid']] = $score['score'];
}
然后循环浏览friends数组并通过查找
$indexedScores

foreach($friends as $key => &$friend) {
    if(isset($indexedScores[$friend['uid']])) {
        $friend['score'] = $indexedScores[$friend['uid']];
    }
    else {
        unset($friends[$key]); //doesn't have a score, so remove
    }
}

usort($friends, function($a, $b) {
    return $a['score'] > $b['score'];
});

我不明白你所说的“然后遍历friends数组并通过查找$IndexedCores设置分数”和下面的代码是什么意思。。。我试过你的代码,但没用。请你再解释一下好吗?@望远镜再试一次,我引用的是
$scores
而不是
$indexedScores
-
$indexedScores
是一个关联数组,其中键是uid,所以你可以使用
isset
查看给定uid是否有分数,就像一个符咒一样工作。。。现在我需要做的就是重新排列数组,这样分数就会下降。。。我已经读过有关
arsort()
的内容,但这如何处理多维数组?知道如何将endgame添加到新数组中(请参阅更新),然后根据分数对整个数组进行排序,然后再对endgame进行排序吗?(如果两名玩家得分相同,则得分第一的玩家(=终局)的排名应高于另一名)