2

我将以下数组合并为一个。第二个数组$ads随机插入到第一个数组 中$EM_Events,但插入的项目在插入时始终保持在一起。我希望将它们随机插入到第一个数组中,而不是呆在一起,也不要改变第一个数组的顺序。我错过了什么?

$EM_Events = EM_Events::get( array(
'scope'=>'future', 
'limit'=>6,
'category'=>'6'
));

$ads = EM_Events::get( array(
'scope'=>'future', 
'limit'=>2,
'category'=>'56'
));


$offset = array_rand($EM_Events);
array_splice($EM_Events, $offset, 0, $ads);
4

2 回答 2

2

array_splice只会在数组中的某个偏移处执行一次插入,因此正如您所说,您的第二个数组将保持在一起。

您将需要遍历第二个数组的所有元素并依次插入每个元素。类似(未经测试):

foreach ( $ads as $ad ) {
    $offset = array_rand($EM_Events);
    array_splice($EM_Events, $offset, 0, $ad);
}

也许

while ( $ad = array_pop($ads) ) {
    $offset = array_rand($EM_Events);
    array_splice($EM_Events, $offset, 0, $ad);
}
于 2012-08-18T17:18:20.157 回答
-1

您要做的是,第二个数组是随机的,您尝试将其包含在第一个数组中的随机位置。但是在你随机化第二个数组之后,使第一个数组的偶数空间为空,即 $EM_EVENTS(0),$EM_EVENTS(1),$EM_EVENTS(2),$EM_EVENTS(3) 中的元素现在保存在 $ EM_EVENTS(1),$EM_EVENTS(3),$EM_EVENTS(5) 等,偶数空间使用循环填充。由于数组已经随机化,因此您可以获得所需的输出。清除?

于 2012-08-18T17:28:20.100 回答