2009-11-01 18 views
1

我在絞盡腦汁地試圖想出一個解決方案。我可以找到很多解決方案來從二維數組中移除模糊,但是我需要移除一個值低於另一個的模糊。這裏是陣列:基於高點去除多維數組中的副本

Array 
(
    [basketball] => Array 
     (
      [0] => stdClass Object 
       (
        [id] => 2 
        [username] => Beans 
        [points] => 30 
       ) 

      [1] => stdClass Object 
       (
        [id] => 314 
        [username] => slights 
        [points] => 20 
       ) 

      [2] => stdClass Object 
       (
        [id] => 123 
        [username] => gibb54 
        [points] => 5 
       ) 

     ) 

    [soccer] => Array 
     (
      [0] => stdClass Object 
       (
        [id] => 2 
        [username] => Beans 
        [points] => 95 
       ) 

      [1] => stdClass Object 
       (
        [id] => 49 
        [username] => sans 
        [points] => 65 
       ) 

      [2] => stdClass Object 
       (
        [id] => 122 
        [username] => peano 
        [points] => 50 
       ) 

      [3] => stdClass Object 
       (
        [id] => 174 
        [username] => fordb 
        [points] => 30 
       ) 

      [4] => stdClass Object 
       (
        [id] => 112 
        [username] => danc 
        [points] => 30 
       ) 


     ) 

) 

正如你可能看到的,用戶ID 2豆類是籃球和足球的首選。由於他們有更多的足球積分,我需要刪除他們的籃球入門ID 314,輕視0值。

我需要這樣做不斷,直到沒有用戶的任何主數組值兩次的0值。

我試過各種foreach解決方案的組合,但我沒有得到任何地方。我認爲一個while循環會更合適,但我不知道要測試什麼條件。

任何想法請??

+1

爲什麼連續循環?這似乎足以通過一行,同時查找另一行中的每個條目。如果發現重複,則刪除較低點的一個。當然,因爲兩個索引都改變了,所以你必須保持一個獨立的索引,該索引從0開始。while條件將是「而當前第一個數組索引小於第一個數組長度」。只有在給定步驟中沒有刪除第一個數組中的元素時,纔會增加索引。 – Ashalynd 2009-11-01 14:38:33

+0

那麼這只是例如,在我的實際場景(100's)中有兩個以上的行。 – Jim 2009-11-01 14:41:48

回答

1

我會循環訪問您的數據並創建一個字典,其中的鍵是用戶標識,並且這些值是附加了運動的相應用戶對象。然後,您可以通過使用運動數據循環遍歷該數組來確定示例數據數組結構,以確定每個用戶的放置位置。

若要去欺騙陣列,使用類似:

$deDupedData = array(); 
foreach ($data as $sport => $users) { 
    foreach ($users as $user) { 
     if (isset($deDupedData[$user->id])) { 
      if ($user->points > $deDupedData[$user->id]->points) { 
       $deDupedData[$user->id]->sport = $sport; 
       $deDupedData[$user->id]->points = $user->points; 
      } 
     } else { 
      $modifiedUser = $user; 
      $modifiedUser->sport = $sport; 
      $deDupedData[$user->id] = $modifiedUser; 
     } 
    } 
} 
// Now reconstruct your array...