1、
在实际应用中,遇到这种以回车分隔的字符串,单是存储来说倒是简单,但是在实际应用中还要对内容进行判断,看是否符合内容的限制,比如说图中的区域限制,我们还要对区域进行判断和限制。
我是这么处理的:
//首先获取字段
$limitArea = I('limit_area','','filter_keyword');
//然后对其进行回车处理,并转换为数组
$limitArea = ecplode(PHP_EOL,$limitArea);
//地区限制临时数组
$limitAreaTemp = [];
foreach ($info['limit_area'] as $area){
//因为我有一个数据表是专门用来存储位置信息的,names:地区名称,code:区域编码
//此类信息可以参考ip.taobao.com中的通过ip获取的位置信息
$areaInfo = D('admin_region2')->where(array('names'=>$area))->find();
//把输入的地址转换为区域编码存入临时数组
$limitAreaTemp[] = $areaInfo['code'];
}
$info['limit_area'] = json_encode($limitAreaTemp);
$res = D('activity')->where(array('id' => $id))->save($info);
现在输出一遍,看下效果:
获取的$limitArea输出:
现在输出去除空格并组成数组的$limitArea:
现在输出$limitAreaTemp:
现在输出$info['limit_area']:
最终以这种格式存入数据库。
2、
现在开始看我们的调取,并展示在textarea中
$info = $this->db->find($activityID);
//我们从数据库中查询的$info['limit_area']为json格式的城市代码,我们现在需要对其进行转换成names
$info['limit_area'] = json_decode($info['limit_area']);
$limitAreaTemp = [];
foreach($info['limit_area'] as $area){
$areaInfo = D('admin_region2')->where(['code'=>$area])->find();
$limitAreaTemp[] = $areaInfo['names'];
}
$info['limit_area'] = join(PHP_EOL,$limitAreaTemp);
$this->assign('info',$info);
最终$info['limit_area']就是博客第一张图片的状态
3、前端如何判断是否在区域范围内
获取用户的ip地址进行判断,通过ip.taobao.com接口返回的城市编码,看此编码是否在此区域的数组中
$locationInfo = $region->getTaobaoIpArea(get_client_ip(0, 1));
$isInLimitArea = in_array($locationInfo['city_id'],json_decode($info['limit_area']));