找回密码
 立即注册
搜索
查看: 416|回复: 0

[基础] 每三篇文章加上一个广告,算法?

  [复制链接]
发表于 2023-2-22 22:04 | 显示全部楼层 |阅读模式
$resource_list 数据格式:


$ad_list数据格式:


 
$resources_list = collection($resources_list)->toArray();
$resources_num  = count($resources_list);
if($ad_list['count'] && $resources_num) {
    foreach($ad_list['ad_list'] as $k => $v){
        $ad_list['ad_list'][$k]['type'] = -1;//用来标示这是一条广告
    }
    $cycle_num = ceil($resources_num / 3);//每3个数据插一条广告
    $seg = array_chunk($resources_list, $cycle_num);//共将资源分成几个小段
    $tmpdata = [];
    foreach($seg as $k => $v){
        if($ad_list['count'] > $cycle_num   &&  ($k  == $cycle_num - 1)  ){
            //当广告数多于资源块数时,资源已经循环完了,则取剩下的所有广告
            $left_ad   = array_slice($ad_list['ad_list'], $k);
            $tmpdata[] = array_merge($v, $left_ad);
        }else{
            $tmpdata[] = array_merge($v, [$ad_list['ad_list'][$k]]);//每个段一个广告
        }
    }
    if(!empty($tmpdata)){
        unset($ad_list, $resources_list);
        $resources_list = $tmpdata;
        unset($tmpdata);
    }
}
原理是正确的,但在合并数据时出了点小问题,注意看:$tmpdata[] = array_merge($v, [$ad_list['ad_list'][$k]); 这一句,每次循环时,$tmpdata[]的索引都会加1,导致最终结果为$tmpdata[0], $tmpdata[1]……这样子,并不是我们想要的结果。
 
答案:
$t =  array_merge($v, [$ad_list['ad_list'][$k]);
$tmpdata = array_merge($tmpdata, $t);

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|学习笔记

GMT+8, 2024-12-22 15:03 , Processed in 0.025477 second(s), 13 queries , APCu On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表