今天在公司提供一个省市县接口,原码为-->
$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