-3

I want to pull 2 videos from this array of videos that share the same contest id. Doesn't matter what the contest ID is, as long as both of the items share the same value. This might be easy but I'm at one of those points where my brain is fried. I can smell the bbq. lol.

    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
        )

)
4

2 回答 2

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;        
}
于 2013-05-09T20:37:10.830 回答
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;
    }   
}
于 2013-05-09T21:06:08.947 回答