省市县,循环组装,整合大数组

今天在公司提供一个省市县接口,原码为-->

$ii=0;

    foreach($sheng as $ckey=>$cval){

        $result[$ii]['pId']=$cval['id'];

        $result[$ii]['pName']=$cval['name'];

        $jj=0;

        foreach($shi as $skey=>$sval){

            if($cval['id']==$sval['parent']){

                $result[$ii]['cityList'][$jj]['cityId']=$sval['id'];

                $result[$ii]['cityList'][$jj]['cityName']=$sval['name'];

            }

            $cc=0;

            foreach($xian as $xkey=>$xval){

                if($sval['id']==$xval['parent']){

                    $result[$ii]['cityList'][$jj]['countryList'][$cc]['countryId']=$xval['id'];

                    $result[$ii]['cityList'][$jj]['countryList'][$cc]['countryName']=$xval['name'];

                }else{

                    continue;

                }

                $cc++;

            }

            $jj++;

        }

        $ii++;

    }

说明:省市县,分别为三个数组,一次性取出来的。

     在这里我写了一个循环,用if来判断parentID是否匹配。写完后经师傅查看,每个市级里面的县都是一样的。

     而且循环套入循环的话,数量巨大,损耗服务器性能(我只想到了不去循环查库额。。。)

解决问题新思路:

$ii =0;

    foreach($xian as $val){

        $array_x[$val['parent']][$ii]['xId']=$val['id'];

        $array_x[$val['parent']][$ii]['xName']=$val['name'];

        $ii++;

    }

$cc =0;

    foreach($shi as $val){

        $array_s[$val['parent']][$cc]['sId']=$val['id'];

        $array_s[$val['parent']][$cc]['sName']=$val['name'];

        $array_s[$val['parent']][$cc]['countryList']=$array_x[$val['id']];

        $cc++;

    }

$qq = 0;

    foreach($sheng as $val){

        $array[$val['id']]['pId']=$val['id'];

        $array[$val['id']]['pName']=$val['name'];

        $array[$val['id']]['cityList']=$array_s[$val['id']];

    }

说明:

 1、首先拼装出县级,因为每一个地方的父类ID都是唯一的。在皮装过程中顺着师傅的思路,父类ID为键。子类为值,但

  一个父类ID下面有很多的子类ID,所以用一个++变量来区分开

 2、拼装市级,因为县级的KEY是市级的ID,所以直接用ID进行匹配后,把整个符合市级ID的数组放入市内

 3、同理拼装省  这样就得到了一个标砖的省市县

ps:修改数组考验一个人的解决方式的思维逻辑,还要考虑服务器,数据库的性能及损耗,和浏览器加载速度问题。虽然调用接口的人只用一次(会做缓存),但是也要考虑全面。

2014-03-13

原文地址:https://www.cnblogs.com/still-love-you/p/4660393.html