2013-05-09 38 views
-3

我想從共享相同比賽ID的這組視頻中抽取2個視頻。無論競賽ID是什麼,只要這兩個項目共享相同的價值即可。這可能很容易,但我在我的大腦被炸的那些點之一。我可以聞到燒烤。大聲笑。從多維數組中挑選2個具有相同contestId的項目

Array 
(
    [0] => Array 
     (
      [id] => 11 
      [filename] => 7966727971960279-4131736221448300-Adele_Set_Fire_to_the_Rain_Cover_by_Sara_Niemietz_ 
      [added] => 2013-05-06 08:50:34 
      [userId] => 14 
      [contestId] => 3 
      [complete] => 1 
     ) 

    [1] => Array 
     (
      [id] => 15 
      [filename] => 7090052934711575-3964279645504194-Adele_Set_Fire_To_The_Rain_cover_by_Sabrina 
      [added] => 2013-05-06 09:58:08 
      [userId] => 14 
      [contestId] => 4 
      [complete] => 1 
     ) 

    [2] => Array 
     (
      [id] => 14 
      [filename] => 6959153088629946-5656902896285110-Adele_Set_Fire_to_the_Rain_Cover_By_Public_School_Kids_Own_With_Guitar 
      [added] => 2013-05-06 09:42:10 
      [userId] => 14 
      [contestId] => 4 
      [complete] => 1 
     ) 

    [3] => Array 
     (
      [id] => 10 
      [filename] => 2795880037180269-1520875971490576-test 
      [added] => 2013-05-06 08:02:53 
      [userId] => 9 
      [contestId] => 3 
      [complete] => 1 
     ) 

    [4] => Array 
     (
      [id] => 12 
      [filename] => 6683752765687164-9656171421456902-Adele_Set_Fire_To_The_Rain_Arlene_Zelina_Cover_ 
      [added] => 2013-05-06 09:21:12 
      [userId] => 11 
      [contestId] => 3 
      [complete] => 1 
     ) 

    [5] => Array 
     (
      [id] => 13 
      [filename] => 6917133659214044-8729839283435145-Adele_Set_Fire_To_The_Rain_Boyce_Avenue_cover_on_iTunes_Spotify 
      [added] => 2013-05-06 09:34:50 
      [userId] => 12 
      [contestId] => 3 
      [complete] => 1 
     ) 

) 
+0

[你嘗試過什麼?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) – jleft 2013-05-09 20:11:53

+0

試圖與MySQL這樣做,但無法弄清楚如何在查詢開始前不知道比賽ID的情況下,拉出2條匹配contestId的記錄。已經嘗試過基於會話的解決方案循環通過目前活躍的競賽Id,但是卻是笨重和錯誤的方式。 – 2013-05-09 20:17:13

+0

可能有超過2條符合該條件的記錄 - 您希望返回哪個記錄?前兩個,最後兩個,隨機的,還有別的? – jleft 2013-05-09 20:45:14

回答

2

你可以將它們存儲在每個元素的數組是與所有元素共享相同contestId的子陣:

$sorted = array(); 

foreach ($elements as $e) { 
    $sorted[$e['contestId']][] = $e; 
} 

print_r($sorted); 

編輯

此功能將給予您有兩個數組元素與contestId相同,如果未找到,則返回null。如果您不需要它們是隨機的,請刪除shuffle()電話。

function getElementsFromArray($elements, $numberOfElements = 2) { 
    shuffle($elements); // In case if you want different elements in each call 
    $sorted = array(); 

    foreach ($elements as $e) { 
     $contestId = $e['contestId']; 
     $sorted[$contestId][] = $e; 

     if (count($sorted[$contestId]) == $numberOfElements) 
      return $sorted[$contestId]; 
    } 

    return null;   
} 
+0

這絕對按照比賽ID將視頻分類爲數組,但我沒有看到它將如何幫助我從其中一個匹配的數組中選擇2。似乎每次都無法正常工作。特別是在第一個數組只有1個結果的情況下,但第二,第三,第四個數組等有很多結果來拉2個視頻。 – 2013-05-09 20:43:12

+0

請參閱我的編輯。 – 2013-05-09 21:07:11

+0

這工作完美,我理解最好的解決方案。謝謝。 – 2013-05-09 21:16:11

1

在這裏你會發現:這將返回你找到第一個比賽id的前兩個視頻,它發現重複。如果您需要兩個以上或者需要所有重複的ID,我認爲您可以根據您的要求修改此模板。

<? 

$vidArr = array(); 
foreach($arr as $ar) 
{ 
    if(!array_key_exists($ar['contestId'],$vidArr)) 
    { 
     $vidArr[$ar['contestId']] = $ar['filename'];  
    } 
    else 
    { 
     echo "Found two videos '". $vidArr[$ar['contestId']] ."' and '".$ar['filename']."' for ContestID ".$ar['contestId']; 
     exit; 
    } 
} 
+0

你的工作太順口了,另一個恰好符合我的需求。我衷心感謝你對此的幫助。謝謝! – 2013-05-09 21:21:57

相關問題