一个简单php和mysql数据分页程序
代码如下 | 复制代码 |
$id = $row["id"]; $outputList .= '<h1>' . $firstname . '</h1><h2>' . $country . ' </h2><hr />'; |
效果
无限级分类是所有程序开发中会碰到的一个问题,下面我来介绍php+mysql实现的一个无限级分类程序,有需要的朋友可参考参考。
下面给大家看看我的数据库结构吧:数据库的名字为:fa_category
Field | Type | Comment |
cid | int(11) | 分类id |
catename | varchar(255) | 分类名字 |
catetype | int(1) | 分类类型,1为单页面,2为普通分类 |
catdir | varchar(255) | 英文目录 |
display | int(1) | 1为显示,2为不显示 |
keywords | varchar(255) | 栏目关键字 |
description | text | 栏目描述 |
ctime | int(11) | 创建时间 |
parentid | int(11) | 父节点id,最高节点父节点为0 |
我们使用一个parentid字段来记录父节点的id,如果parentid为0,则为root。不多说,我们看看代码怎么写吧。我们要实现的功能就是如图片所示:
怎么样把它这样显示呢?这个问题我想了很久,先看看这段SQL语句吧,
代码如下 | 复制代码 |
SELECT c.cat_id, c.cat_name, c.measure_unit, c.parent_id, c.is_show, c.show_in_nav, c.grade ,c.sort_order, COUNT( s.cat_id ) AS has_children |
用左连接连接一个表,返回一个字段 has_children,这个字段是记录有多少子节点。
看看代码吧,
代码如下 | 复制代码 |
public function getCategory($catid=0,$re_type = true,$selected=0) { $db = new Public_DataBase(); $sql = 'select c.cid,c.catename,c.catetype,c.ctime,c.parentid,count(s.cid) as has_children from '. __MYSQL_PRE.'category as c left join '. __MYSQL_PRE.'category as s on s.parentid=c.cid group by c.cid order by c.parentid asc'; $res = $db->selectTable($sql); $cateInfo = self::getChildTree($catid,$res); if($re_type==true) { $select = ''; foreach($cateInfo as $val) { $select .= '<option value="' . $val['cid'] . '" '; $select .= ($selected == $val['cid']) ? "selected='ture'" : ''; $select .= '>'; if($val['level']>0) { $select .= str_repeat(' ', $val['level'] * 4); } $select .= htmlspecialchars(addslashes($val['catename']), ENT_QUOTES) . '</option>'; } return $select; } else { foreach($cateInfo as $key=>$val) { if($val['level']>0) { $cateInfo[$key]['catename'] = "|".str_repeat(' ', $val['level'] * 8)."└─".$val['catename']; } } return $cateInfo; } } /** * 通过父ID递归得到所有子节点树 * @param int $catid 上级分类 * @param array $arr 含有所有分类的数组 * @return array */ public function getChildTree($catid,$arr) { $level = $last_cat_id = 0; while (!empty($arr)) { foreach($arr as $key=>$value) { $cid = $value['cid']; if ($level == 0 && $last_cat_id == 0) { if ($value['parentid'] > 0) { break; } $options[$cid] = $value; $options[$cid]['level'] = $level; $options[$cid]['id'] = $cid; $options[$cid]['name'] = $value['catename']; unset($arr[$key]); if ($value['has_children'] == 0) { continue; } $last_cat_id = $cid; $cat_id_array = array($cid); $level_array[$last_cat_id] = ++$level; continue; } if ($value['parentid'] == $last_cat_id) { $options[$cid] = $value; $options[$cid]['level'] = $level; $options[$cid]['id'] = $cid; $options[$cid]['name'] = $value['catename']; unset($arr[$key]); if ($value['has_children'] > 0) { if (end($cat_id_array) != $last_cat_id) { $cat_id_array[] = $last_cat_id; } $last_cat_id = $cid; $cat_id_array[] = $cid; $level_array[$last_cat_id] = ++$level; } } elseif ($value['parentid'] > $last_cat_id) { break; } } $count = count($cat_id_array); if ($count > 1) { $last_cat_id = array_pop($cat_id_array); } elseif ($count == 1) { if ($last_cat_id != end($cat_id_array)) { $last_cat_id = end($cat_id_array); } else { $level = 0; $last_cat_id = 0; $cat_id_array = array(); continue; } } if ($last_cat_id && isset($level_array[$last_cat_id])) { $level = $level_array[$last_cat_id]; } else { $level = 0; } } return $options; |
}用smarty的一个循环就可以把它显示出来 效果和上面图片的一样!大家有什么问题可以给我留言。
本文章利用Ajax分页来简单讲述一下如何利用php与ajax实现数据无刷新分页功能,有需要的朋友可参考一下。简单的mysql数据表结构
代码如下 | 复制代码 |
CREATE TABLE messages |
JavaScript 代码
这里是ajax前段利用jquery来处理
代码如下 | 复制代码 |
<script type="text/javascript" src="http://ajax.googleapis.com/ function loading_show() function loading_hide() function loadData(page) </script> |
load_data.php
这里是获取由ajax发送的数据然后经过php查询mysql返回信息
代码如下 | 复制代码 |
<?php //Some Code. Available in download script } |
三种方法.
1.
代码如下 | 复制代码 |
<?php |
2.
代码如下 | 复制代码 |
<?php |
3.
代码如下 | 复制代码 |
<?php $str = '(银子)'; $txt = '我的呢称(银子)'; echo preg_replace("/(Q$strE)/","<span style='color:#f00;'>$1</span>",$txt); ?> |
三种方法都返回同样结果.. PHP中的Perl风格正则与Perl完全一样.连quotemeta也是通用的..
一些其它关于正则的实例
例子:
代码如下 | 复制代码 |
$text = “foobar123fooabcbar”; $text = preg_replace(“/foo(?=bar)/”, “***”, $text); |
//匹配bar前面的位置 ***bar123fooabcbar
代码如下 | 复制代码 |
$text = “foobar123fooabcbar”; $text = preg_replace(“/(?<=bar)123/”, “***”, $text); |
//匹配bar后面的位置 foo***123fooabcbar
代码如下 | 复制代码 |
$text = “foobar123fooabcbar”; $text = preg_replace(“/foo(?!bar)/”, “***”, $text); |
//匹配后面跟的不是bar的位置 foobar123***abcbar
代码如下 | 复制代码 |
$text = “foobar123fooabcbar”; $text = preg_replace(“/(?<!foo)bar/”, “***”, $text); |
//匹配前面不是foo的位置 foobar123fooabc***
在php中如果我想要对两个数组进行如并集、交集和差集操作,我们可直接使用php自带的函数来操作如array_merge(),array_intersect(),array_diff().//计算数组的合并 array_merge与“+”的区别
array_merge() 函数把两个或多个数组合并为一个数组。
如果键名有重复,该键的键值为最后一个键名对应的值(后面的覆盖前面的)。如果数组是数字索引的,则键名会以连续方式重新索引。
注释:如果仅仅向 array_merge() 函数输入了一个数组,且键名是整数,则该函数将返回带有整数键名的新数组,其键名以 0 开始进行重新索引。(参见例子 2)
代码如下 | 复制代码 |
$a = array(1 => 'a', 'b', 'c'); |
要合并的两个数组中有相同的字符串键的时候,使用array_merge()会覆盖掉原来的值,
而使用“+”合并数组则会和用“+”号合并数组相同数字键一样把最先出现的值作为最终结果返回,如下例:
代码如下 | 复制代码 |
$a2 = array('str' => 'a', 'b', 'c'); 结果依次为: Array |
注:如果想用array_merge合并两个数组,返回结果可能还会有相同的元素,这时候可以用array_unique()把相同的元素去掉
//计算数组的交集
array_intersect() 函数返回两个或多个数组的交集数组。
结果数组包含了所有在被比较数组中,也同时出现在所有其他参数数组中的值,键名保留不变。
注释:仅有值用于比较。
代码如下 | 复制代码 |
$a = array('jpg','png','gif','bmp'); $b = array('JPG','txt','docx','bmp'); $intersection = array_intersect($a, $b); |
还可以通过函数,获取自己想要的(比如元素不区分大小写)
代码如下 | 复制代码 |
$intersection2 = array_intersect(array_map('strtolower',$a), array_map('strtolower',$b)); |
结果依次为:
代码如下 | 复制代码 |
Array ( [3] => bmp ) Array ( [0] => jpg [3] => bmp ) |
//计算数组的差集
代码如下 | 复制代码 |
$old = array('jpg','png','gif','bmp'); |
注:返回结果的元素包含$old的元素,不包括$new的元素
print_r($difference);
结果为:
代码如下 | 复制代码 |
Array ( [0] => jpg [1] => png [2] => gif ) |
也可以用函数先进行处理,再计算差集
array_diff() 函数返回两个数组的差集数组。该数组包括了所有在被比较的数组中,但是不在任何其他参数数组中的键值。
在返回的数组中,键名保持不变。
语法
array_diff(array1,array2,array3...)
代码如下 | 复制代码 |
$difference = array_diff(array_map('strtolower',$old), array_map('strtolower',$new)); |
相关文章
- 我们这里介绍php与KindEditor编辑器使用时如何利用KindEditor编辑器的分页功能实现文章内容分页,KindEditor编辑器在我们点击分页时会插入代码,我们只要以它为分切符,就...2016-11-25
- 本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
- 这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
- 最近接了一个项目,其中有需求要用到jquery分页控件,上网也找到了需要分页控件,各种写法各种用法,都是很复杂,最终决定自己动手写一个jquery分页控件,全当是练练手了。写的不好,还请见谅,本分页控件在chrome测试过,其他的兼容性...2015-10-30
- 最基础的对数据的增加删除修改操作实例,菜鸟们收了吧...2013-09-26
- 这篇文章主要介绍了解决Mybatis 大数据量的批量insert问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-09
- 本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
Antd-vue Table组件添加Click事件,实现点击某行数据教程
这篇文章主要介绍了Antd-vue Table组件添加Click事件,实现点击某行数据教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-17- 这篇文章主要介绍了详解如何清理redis集群的所有数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-18
- 这篇文章主要介绍了vue 获取到数据但却渲染不到页面上的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-19
- 这篇文章主要介绍了微信小程序 页面传值详解的相关资料,需要的朋友可以参考下...2017-03-13
- 本文通过两个示例讲解了一下Process类调用外部应用程序的基本用法,并简单讲解了StartInfo属性,有需要的朋友可以参考一下。...2020-06-25
- 在php中解析xml文档用专门的函数domdocument来处理,把json在php中也有相关的处理函数,我们要把数据xml 数据存到一个数据再用json_encode直接换成json数据就OK了。...2016-11-25
- 本文实例讲述了jquery实现的伪分页效果代码。分享给大家供大家参考,具体如下:这里介绍的jquery伪分页效果,在火狐下表现完美,IE全系列下有些问题,引入了jQuery1.7.2插件,代码里有丰富的注释,相信对学习jQuery有不小的帮助,期...2015-10-30
- 这篇文章主要介绍了mybatis-plus 处理大数据插入太慢的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-18
- 这篇文章主要介绍了postgresql数据添加两个字段联合唯一的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-04
- 大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
- 这篇文章主要介绍了uniapp微信小程序:key失效的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-20
Vue生命周期activated之返回上一页不重新请求数据操作
这篇文章主要介绍了Vue生命周期activated之返回上一页不重新请求数据操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-26- 这篇文章主要介绍了微信小程序 二维码生成工具 weapp-qrcode详解,教大家如何在项目中引入weapp-qrcode.js文件,通过实例代码给大家介绍的非常详细,需要的朋友可以参考下...2021-10-23