今天遇到的这些函数主要是在做研判系统,需要数据统计的时候,上图为我做的系统一部分截图,需要通过起始时间,终止时间,五级问题,三级地址,还有信息来源进行数据分析。
1、array_combine:通过合并两个数组来创建一个新数组,其中的一个数组元素为键名,另一个数组元素为键值
在做研判统计时,因为要查询的字段比较多,所以就用该函数经要查询的字段构成一个数组。
$params=array($search_source,$problem_one,$problem_two,$problem_three,$problem_four,$problem_five,$address_one,$address_two,$address_three); $key=array(PRE."problem_source",PRE."problem_type_leavelone",PRE."problem_type_leaveltwo",PRE."problem_type_leavelthree",PRE."problem_type_leavelfour",PRE."problem_type_leavelfive",PRE."address_one",PRE."address_two",PRE."address_three");
if(count($params)==count($key)){
$params=array_combine($key,$params);
}else{
$params=NULL;
}
这里,$params数组是所有要查询的字段,而$key对应的是数据库中要查询字段的名称,将它们用函数进行组合。在数据表类中,可以这样用它们:
if(!empty($params)){ foreach ($params as $key=>$val){ if(!empty($val)){ $sql.=" and ".$key.'= '."$val"; } } }
这样拼接起来的sql语句是这样的:$sql .= and handing_problem_source = $search_source and handing_problem_leavelone = $problem_one ...... 从而实现数据查找。
2、array_keys 和 array_values
array_keys:返回包含数组中所有键名的一个新数组
array_values:array_values() 函数返回一个包含给定数组中所有键值的数组,但不保留键名
在编写查询函数时,可以将要查询的值和数据库对应字段写成一个数组,一个对应键值,一个对应value值。
foreach ($department_array as $key=>$value){ $r['count'] = handing::getCountBySource(array("handing_resp_department" => $value['id'])); }
在数据表类中这样操作:
static public function getCountBySource($source){ $sql = "select count(1) as act from " . $mypdo->prefix . "handing "; if(!empty($source)){ $sql .= "where ".array_keys($source)[0]."= ".array_values($source)[0]; } }
如果,不止有一个数组,而是多个,那么就用循环遍历。
static public function getCountBySource($source){ $sql = "select count(1) as act from " . $mypdo->prefix . "handing "; if(!empty($source)){ for($i = 0; $i <sizeof($source) ;$i++){ $sql.= " and ".array_keys($source)[$i]."= ".array_values($status)[$i]; } } }
这样,执行的sql语句是这样的:$sql = "select count(1) as act from " . $mypdo->prefix . "handing " where handing_resp_department = $value['id'] ;
3、strtotime : 将英文文本日期时间解析为 Unix 时间戳
这个函数主要是把我选中的日历数字形式转换为时间戳存在数据库中。
比如我选中了如图的时间"6 September 2018"
,通过该函数就可以转换为 1536244262