我有一个帖子 id 数组和一个视频 id 数组。我需要将两者混合起来,得到类似“首先是一个视频,然后是 3 个普通帖子,然后是另一个视频,然后是 5 个普通帖子......重复......直到最后。(即:视频,正常,正常,正常,视频,正常*5 并重复..)
我的代码可以工作,但我怎样才能使它更加干净和简洁?
$a1 = $video_posts_arr;
$a2 = $standard_posts_arr;
$res = [];
$tc1 = count($a1);
$tc2 = count($a2);
$tc = $tc1 + $tc2;
$i1 = 0;
$i2 = 0;
for ($i = 0; $i < $tc; $i++) {
// first video
if (isset( $a1[$i1] )) {
array_push($res,$a1[$i1]);
$i1++;
}
// next 3 normals
if (isset( $a2[$i2]) ) {
array_push($res,$a2[$i2]);
$i2++;
array_push($res,$a2[$i2]);
$i2++;
array_push($res,$a2[$i2]);
$i2++;
}
// next video
if (isset( $a1[$i1] )) {
array_push($res,$a1[$i1]);
$i1++;
}
// next 5 normals
if (isset( $a2[$i2]) ) {
array_push($res,$a2[$i2]);
$i2++;
array_push($res,$a2[$i2]);
$i2++;
array_push($res,$a2[$i2]);
$i2++;
array_push($res,$a2[$i2]);
$i2++;
array_push($res,$a2[$i2]);
$i2++;
}
}```
最佳答案
从你的措辞中很难看出,但我假设你想在 3 个“常规”帖子之间来回切换,然后是 5 个、然后 3 个,等等,在每个“视频”帖子之间。因此,当我们循环浏览视频帖子时,我们必须在这些选项之间来回切换,然后使用它加上标记/计数器来知道在常规帖子列表中将每个视频帖子插入到哪里。
$a1 = array("v1", "v2", "v3", "v4", "v5");
$a2 = array("p1", "p2", "p3", "p4", "p5", "p6", "p7", "p8", "p9", "p10", "p11", "p12", "p13", "p14", "p15", "p16");
$skipNum = 3;
$currentPos = 1;
array_unshift($a2, array_shift($a1));
foreach($a1 as $v)
{
$currentPos+= $skipNum;
array_splice($a2, $currentPos, 0, $v);
$currentPos++;
if($skipNum == 3)
{
$skipNum = 5;
}
else
{
$skipNum = 3;
}
}
var_dump($a2);
关于php - 如何在php数组中按规律推送元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59382588/