递归方法,计算时间差,及sphinx(项目首页)
2016-09-25 14:39
274 查看
/**
* 首页
* @return [type] [description]
*/
public function actionIndex(){
//递归获取职位书分类
//显示职位分类
$cache = $this->get_cat_array($fid=0);
//展示最新职位
$db=yii::$app->db;
$data=$db->createCommand("select * from position join company on position.cid=company.cid order by add_time desc limit 5")->queryAll();
//print_R($data);die;
//获取计算添加计算与当前时间的时间差
foreach ($data as $k => $v) {
$a = strtotime($data[$k]['add_time']);
$b = time();
$c = $b-$a;
$day = floor($c/3600/24);
if($day>0)
{
$d = $c-($day*3600*24);
}
else
{
$d = $c-(3600*24);
}
//print_R($d);die;
$mou = floor($d/3600);
if($mou>0)
{
$f = $d-($mou*3600);
}
else
{
$f=$d-3600;
}
$fen = floor($f/60);
$data[$k]['jitime'] = $day."天".$mou."时".$fen."分";
}
//显示最热职位
$datahot=$db->createCommand("select * from position join company on position.cid=company.cid order by clike_num desc limit 5")->queryAll();
//var_dump($datahot);die;
//获取计算添加计算与当前时间的时间差
foreach ($datahot as $k => $v) {
$a = strtotime($data[$k]['add_time']);
$b = time();
$c = $b-$a;
$day = floor($c/3600/24);
if($day>0)
{
$d = $c-($day*3600*24);
}
else
{
$d = $c-(3600*24);
}
//print_R($d);die;
$mou = floor($d/3600);
if($mou>0)
{
$f = $d-($mou*3600);
}
else
{
$f=$d-3600;
}
$fen = floor($f/60);
$datahot[$k]['jitime'] = $day."天".$mou."时".$fen."分";
}
//print_R($datahot);die;
return $this->render("index.html",['data'=>$data,'arr'=>$cache,'datahot'=>$datahot]);
}
/**
* 层次递归
* @param integer $pid [description]
* @return [type] [description]
*/
public function get_cat_array($fid = 0) {
$category=(new \yii\db\Query())->select(['pid','fname','fid'])->from('positioncate')->all();
$arr = array();
foreach($category as $index => $row){
// 对每个分类进行循环。
if($category[$index]['fid'] == $fid){
//如果有子类 自己调用自己
$row['child'] = $this->get_cat_array($category[$index]['pid']);
//调用函数,传入参数,继续查询下级
$arr[] = $row; //组合数组
}
}
return $arr;
}
//采用sphinx进行搜索
public function actionSearch(){
//判断是否是POST提交
if(\Yii::$app->request->isPost){
$usearch = \Yii::$app->request->post('usearch');
//var_dump($usearch);die;
include'sphinxapi.php'; //包含sphinxapi类
$sphinx= new SphinxClient(); //实例化
$sphinx->SetServer('127.0.0.1',9312);//链接
//SPH_MATCH_ALL匹配所有查询词(默认模式)
$sphinx->SetMatchMode ( SPH_MATCH_ALL);
//匹配查询词中的任意一个
$sphinx->SetMatchMode ( SPH_MATCH_ANY);
//将整个查询看作一个词组,要求按顺序完整匹配
$sphinx->SetMatchMode ( SPH_MATCH_PHRASE);
$res=$sphinx->Query("$usearch","*");//查询的字段第二参数是你配置文件里面写得规则这里是*就会匹配所有规则
//判断键值是否存在
if(!array_key_exists("matches",$res)){
exit("没有检索到您需要的信息");
}
// 1.Matches中就是查询的结果了,但是仿佛不是我们想要的数据。
// 2.根据官方的说明是Sphinx并没有连接到MySQL去取数据,只是根据它自己的索引内容进行计算;
// 3.因此如果想用Sphinx提供的API去取得我们想要的数据,还必须以查询的结果为依据(也就是ID为依据);
// 4.根据ID再次查询MySQL从而得到我们想要的数据。
//获取主键 (这里的主键就是数据在数据库中的自增ID) 通过ID在根据数据库 查询出数据
$key = array_keys($res['matches']);
//var_dump($key);die;
//把数组元素组合为一个字符串
$key=implode(',',$key);
//$key = join(',',$key);
// var_dump($key);die;
//根据获取到的ID在查询数据库
$db=yii::$app->db;
$data=$db->createCommand("select * from position join company on position.cid=company.cid where pos_id in ($key)")->queryAll();
//var_dump($data);die;
//获取计算添加计算与当前时间的时间差
foreach ($data as $k => $v) {
$a = strtotime($data[$k]['add_time']);
$b = time();
$c = $b-$a;
$day = floor($c/3600/24);
if($day>0)
{
$d = $c-($day*3600*24);
}
$data[$k]['jitime'] = $day."天前发布";
}
// var_dump($data);die;
return $this->render('list.html',['data'=>$data,'usearch'=>$usearch]);
//$query = new \yii\db\Query();
//使用框架中的in 哈希格式 来检索
// $blogInfo = $query->from(['b'=>'ex_blog','bt'=>'ex_blog_type'])->where(['id'=>[$key]])->all();
//var_dump($blogInfo);die;
//将数组转换为Json类型
//echo json_encode($blogInfo);
}else{
echo "非法提交";
}
}
参考渲染方法
<div id="sidebar">
<div class="mainNavs">
<?php foreach ($arr as $kone => $vone) {?>
<div class="menu_box">
<div class="menu_main">
<h2><?php echo $vone['fname']?> <span></span></h2>
<?php foreach ($vone['child'] as $ktwo => $vtwo) {?>
<a href="h/jobs/list_Java?labelWords=label"><?php echo $vtwo['fname']?></a>
<?php }?>
</div>
<div class="menu_sub dn">
<?php foreach ($vone['child'] as $ktwo => $vtwo) {?>
<dl class="reset">
<dt>
<a href="h/jobs/list_后端开发?l
abc5
abelWords=label"><?php echo $vtwo['fname']?></a>
</dt>
<dd>
<?php foreach ($vtwo['child'] as $kthree => $vthree) {?>
<a href="h/jobs/list_Java?labelWords=label"><?php echo $vthree['fname']?></a>
<?php }?>
</dd>
</dl>
<?php }?>
</div>
</div>
<?php }?>
</div>
* 首页
* @return [type] [description]
*/
public function actionIndex(){
//递归获取职位书分类
//显示职位分类
$cache = $this->get_cat_array($fid=0);
//展示最新职位
$db=yii::$app->db;
$data=$db->createCommand("select * from position join company on position.cid=company.cid order by add_time desc limit 5")->queryAll();
//print_R($data);die;
//获取计算添加计算与当前时间的时间差
foreach ($data as $k => $v) {
$a = strtotime($data[$k]['add_time']);
$b = time();
$c = $b-$a;
$day = floor($c/3600/24);
if($day>0)
{
$d = $c-($day*3600*24);
}
else
{
$d = $c-(3600*24);
}
//print_R($d);die;
$mou = floor($d/3600);
if($mou>0)
{
$f = $d-($mou*3600);
}
else
{
$f=$d-3600;
}
$fen = floor($f/60);
$data[$k]['jitime'] = $day."天".$mou."时".$fen."分";
}
//显示最热职位
$datahot=$db->createCommand("select * from position join company on position.cid=company.cid order by clike_num desc limit 5")->queryAll();
//var_dump($datahot);die;
//获取计算添加计算与当前时间的时间差
foreach ($datahot as $k => $v) {
$a = strtotime($data[$k]['add_time']);
$b = time();
$c = $b-$a;
$day = floor($c/3600/24);
if($day>0)
{
$d = $c-($day*3600*24);
}
else
{
$d = $c-(3600*24);
}
//print_R($d);die;
$mou = floor($d/3600);
if($mou>0)
{
$f = $d-($mou*3600);
}
else
{
$f=$d-3600;
}
$fen = floor($f/60);
$datahot[$k]['jitime'] = $day."天".$mou."时".$fen."分";
}
//print_R($datahot);die;
return $this->render("index.html",['data'=>$data,'arr'=>$cache,'datahot'=>$datahot]);
}
/**
* 层次递归
* @param integer $pid [description]
* @return [type] [description]
*/
public function get_cat_array($fid = 0) {
$category=(new \yii\db\Query())->select(['pid','fname','fid'])->from('positioncate')->all();
$arr = array();
foreach($category as $index => $row){
// 对每个分类进行循环。
if($category[$index]['fid'] == $fid){
//如果有子类 自己调用自己
$row['child'] = $this->get_cat_array($category[$index]['pid']);
//调用函数,传入参数,继续查询下级
$arr[] = $row; //组合数组
}
}
return $arr;
}
//采用sphinx进行搜索
public function actionSearch(){
//判断是否是POST提交
if(\Yii::$app->request->isPost){
$usearch = \Yii::$app->request->post('usearch');
//var_dump($usearch);die;
include'sphinxapi.php'; //包含sphinxapi类
$sphinx= new SphinxClient(); //实例化
$sphinx->SetServer('127.0.0.1',9312);//链接
//SPH_MATCH_ALL匹配所有查询词(默认模式)
$sphinx->SetMatchMode ( SPH_MATCH_ALL);
//匹配查询词中的任意一个
$sphinx->SetMatchMode ( SPH_MATCH_ANY);
//将整个查询看作一个词组,要求按顺序完整匹配
$sphinx->SetMatchMode ( SPH_MATCH_PHRASE);
$res=$sphinx->Query("$usearch","*");//查询的字段第二参数是你配置文件里面写得规则这里是*就会匹配所有规则
//判断键值是否存在
if(!array_key_exists("matches",$res)){
exit("没有检索到您需要的信息");
}
// 1.Matches中就是查询的结果了,但是仿佛不是我们想要的数据。
// 2.根据官方的说明是Sphinx并没有连接到MySQL去取数据,只是根据它自己的索引内容进行计算;
// 3.因此如果想用Sphinx提供的API去取得我们想要的数据,还必须以查询的结果为依据(也就是ID为依据);
// 4.根据ID再次查询MySQL从而得到我们想要的数据。
//获取主键 (这里的主键就是数据在数据库中的自增ID) 通过ID在根据数据库 查询出数据
$key = array_keys($res['matches']);
//var_dump($key);die;
//把数组元素组合为一个字符串
$key=implode(',',$key);
//$key = join(',',$key);
// var_dump($key);die;
//根据获取到的ID在查询数据库
$db=yii::$app->db;
$data=$db->createCommand("select * from position join company on position.cid=company.cid where pos_id in ($key)")->queryAll();
//var_dump($data);die;
//获取计算添加计算与当前时间的时间差
foreach ($data as $k => $v) {
$a = strtotime($data[$k]['add_time']);
$b = time();
$c = $b-$a;
$day = floor($c/3600/24);
if($day>0)
{
$d = $c-($day*3600*24);
}
$data[$k]['jitime'] = $day."天前发布";
}
// var_dump($data);die;
return $this->render('list.html',['data'=>$data,'usearch'=>$usearch]);
//$query = new \yii\db\Query();
//使用框架中的in 哈希格式 来检索
// $blogInfo = $query->from(['b'=>'ex_blog','bt'=>'ex_blog_type'])->where(['id'=>[$key]])->all();
//var_dump($blogInfo);die;
//将数组转换为Json类型
//echo json_encode($blogInfo);
}else{
echo "非法提交";
}
}
参考渲染方法
<div id="sidebar">
<div class="mainNavs">
<?php foreach ($arr as $kone => $vone) {?>
<div class="menu_box">
<div class="menu_main">
<h2><?php echo $vone['fname']?> <span></span></h2>
<?php foreach ($vone['child'] as $ktwo => $vtwo) {?>
<a href="h/jobs/list_Java?labelWords=label"><?php echo $vtwo['fname']?></a>
<?php }?>
</div>
<div class="menu_sub dn">
<?php foreach ($vone['child'] as $ktwo => $vtwo) {?>
<dl class="reset">
<dt>
<a href="h/jobs/list_后端开发?l
abc5
abelWords=label"><?php echo $vtwo['fname']?></a>
</dt>
<dd>
<?php foreach ($vtwo['child'] as $kthree => $vthree) {?>
<a href="h/jobs/list_Java?labelWords=label"><?php echo $vthree['fname']?></a>
<?php }?>
</dd>
</dl>
<?php }?>
</div>
</div>
<?php }?>
</div>
相关文章推荐
- php中计算时间差的几种方法
- 在php和MySql中计算时间差的方法详解
- [导入]c# 统计方法执行时间,计算缓存读取数据方法的命中率
- c与java中计算程序执行时间的方法
- 计算程序执行时间的方法
- JAVA中计算百分比和解析时间的方法
- c++中计算运行时间 clock() clock_t 示例:比较递归和非递归数值运算
- php中计算时间差的几种方法
- 几种计算时间的方法
- Oracle计算时间差的方法
- 在php和MySql中计算时间差的方法
- C#与SQL中计算时间差的方法
- 图像实时处理常用时间间隔计算方法(微秒级)
- c# 统计方法执行时间,计算缓存读取数据方法的命中率
- php中计算时间差的几种方法
- php中计算时间差的几种方法
- 手机电池充电时间计算方法
- Mysql 计算日期相差时间方法
- 面试题:使用递归的方法计算1到100的累加。
- 性能测试中考虑时间(Thinking Time)的计算方法 -http://developer.51cto.com/art/200807/87478.htm