Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.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 从多维数组中选择两个具有相同竞赛ID的项目_Php_Arrays_Codeigniter - Fatal编程技术网

Php 从多维数组中选择两个具有相同竞赛ID的项目

Php 从多维数组中选择两个具有相同竞赛ID的项目,php,arrays,codeigniter,Php,Arrays,Codeigniter,我想从共享相同竞赛id的视频数组中提取2个视频。竞赛id是什么并不重要,只要两个项目共享相同的值。这可能很容易,但我正处于我的大脑被烧坏的时刻之一。我能闻到烤肉的味道。哈哈 Array ( [0] => Array ( [id] => 11 [filename] => 7966727971960279-4131736221448300-Adele_Set_Fire_to_the_Rain_Cover

我想从共享相同竞赛id的视频数组中提取2个视频。竞赛id是什么并不重要,只要两个项目共享相同的值。这可能很容易,但我正处于我的大脑被烧坏的时刻之一。我能闻到烤肉的味道。哈哈

    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
        )

)

您可以将它们存储在一个数组中,每个元素都是子数组,所有元素共享相同的
竞赛ID

$sorted = array();

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

print_r($sorted);
编辑

此函数将为您提供一个包含两个元素的数组,两个元素具有相同的
竞赛ID
,如果未找到,则为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;        
}

给你:这将返回它发现重复的第一个竞赛id的前两个视频。如果您需要两个以上的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;
    }   
}

尝试使用mysql执行此操作,但在开始查询之前,在不知道竞赛ID的情况下,无法找出如何提取具有匹配竞赛ID的2条记录。已经尝试了一个基于会话的解决方案,通过当前活动的竞赛Id循环,但该解决方案太大且有问题。可能有2条以上的记录符合该条件-您希望返回哪条记录?前两个,后两个,随机的,其他的?随机的。我想要的是两个随机的视频,带有匹配的竞赛Id。这个问题不是重复的吗这肯定会按竞赛ID将视频排序到阵列中,但我不知道它如何帮助我从匹配的阵列中选择2个。似乎它不会每次都正常工作。特别是在第一个数组只有一个结果的情况下,而第二个、第三个、第四个数组等有很多结果可以拉2个视频。这非常有效,我最了解解决方案。谢谢。你的工作太好了,另一个正好适合我的需要。我真诚地感谢你在这方面的帮助。谢谢