PHP试题网_中国最大的免费网络PHP试题测试平台,PHP试卷调查,PHP试卷模板、PHP考试测验
公告: 【20201211】公告:复杂试卷成功上线,问答模块很快上线……网站将有诸多变化
$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);
 

作者:OK兄 浏览次数:90