Php 从多维数组中选择两个具有相同竞赛ID的项目
我想从共享相同竞赛id的视频数组中提取2个视频。竞赛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
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个视频。这非常有效,我最了解解决方案。谢谢。你的工作太好了,另一个正好适合我的需要。我真诚地感谢你在这方面的帮助。谢谢