2014-07-02 102 views
1

我正在Facebook上開發一款遊戲,並希望向用戶展示一個朋友的高分。 這樣做最有效的方法是什麼?朋友高分:合併兩個陣列

我有兩個數組:

第一個,$all,從我的數據庫來,持有FBID的所有用戶的比分是誰玩過的遊戲:

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

    [1] => Array 
     (
      [uid] => 112873 
      [score] => 0 
      [endgame] => 1404334512 
     ) 
    ... 
) 

第二個,$friends ,來自Facebook,擁有所有用戶的朋友:

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 
     ) 
    ... 
) 

我一直在使用in_array嘗試了各種東西,但無法得到它的權利...任何人誰可以幫我?

回答

1

uid索引的分數創建一個新數組。

$indexedScores = []; 

foreach($all as $score) { 
    $indexedScores[$score['uid']] = $score['score']; 
} 

然後通過朋友陣列循環,通過查找設置的比分$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']; 
}); 
+0

我不明白你的意思「然後通過朋友陣列環路什麼,並通過查找設置的分數$ indexedScores「和隨後的代碼...我試過你的代碼,但它沒有工作。你能解釋一下嗎? – binoculars

+0

@binoculars再試一次,我引用'$ scores'而不是'$ indexedScores' - '$ indexedScores'是一個關聯數組,其中的鍵是uid,因此您可以使用'isset'來查看給定的uid是否有分數或者不是 – FuzzyTree

+0

不錯,像魅力一樣工作......現在我所需要做的就是重新排列數組,使分數降序...我讀過'arsort()',但這對多維數組是如何工作的? – binoculars