当前位置:  编程技术>php
本页文章导读:
    ▪PHP排序算法的复习和总结       直接上代码吧! 代码如下: <?php /* * 插入排序(一维数组) * 每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当的位置,使数列依然有序;直到待排序的数据元素全部.........
    ▪php网上商城购物车设计代码分享       首先,购物车的数据库设计: 1. id 2. goods_id 商品ID 3. session_id 购物车ID 4. goods_sn 商品编码 5. goods_name 商品名称 6. shop_price 商品商城售价 7. goods_price 商品真实售价(与shop_price的区别在于,当.........
    ▪php后台多用户权限组思路与实现程序代码分享       adminconfig.php 这是后台系统中所有文件权限配置。 fun.php 这是一个功能函数 left.php 网站后台根据用户登录的ID来加载相对应的功能菜单 op.php 调用adminconfig.php 默认权限文件 opsava.php 保存用户.........

[1]PHP排序算法的复习和总结
    来源: 互联网  发布时间: 2013-11-30
直接上代码吧!
代码如下:

<?php
/*
* 插入排序(一维数组)
* 每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当的位置,使数列依然有序;直到待排序的数据元素全部插入完成为止。
*/
function insertSort($arr){
if(!is_array($arr) || count($arr)==0){
return $arr;
}
$count = count($arr);
for($i=1; $i<$count; $i++){
if(isset($arr[$i])){
   $tmp = $arr[$i]; //获取后一个元素的值
   $j = $i - 1; //获取前面的下标
   while($arr[$j] > $tmp){ //如果前面一个比后面一个大, 这里是从小到大
    $arr[$j+1] = $arr[$j]; //把小的元素和前面的对换,直到移动到合适的位置,在移动下一个
    $arr[$j] = $tmp;
    $j--;
   }
}
}
return $arr;
}
  
/*
* 选择排序(一维数组)
* 每一趟从待排序的数据元素中选出最小(最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
*/
function selectSort($arr){
if(!is_array($arr) || count($arr) == 0)
{
return $arr;
}
$count = count($arr);
for($i=0; $i<$count; $i++){
$k = $i;
for($j=$i+1; $j<$count; $j++){
  if ($arr[$k] > $arr[$j])
    $k = $j; //找出最小的
   if ($k != $i){
     $tmp = $arr[$i];
     $arr[$i] = $arr[$k];
     $arr[$k] = $tmp;
   }
}
}
return $arr;
}
/*  
* 冒泡排序(一维数组)
* 两两比较待排序数据元素的大小,发现两个数据元素的次序相反即进行交换,直到没有反序的数据元素为止
*/
function bubbleSort($array){
$count = count($array);
if ($count <= 0) {
return false;
}
for($i=0; $i<$count; $i++){
for($j=$count-1; $j>$i; $j--){
   if ($array[$j] < $array[$j-1]){ //比较找到的数进行交换
    $tmp = $array[$j];
    $array[$j] = $array[$j-1];
    $array[$j-1] = $tmp;
   }
}
}
return $array;
}
  
/*
* 快速排序(一维数组)
*
*/
function quickSort($array){
if (count($array) <= 1){
return $array;
}
$key = $array[0];
$left_arr = array();
$right_arr = array();
for ($i=1; $i<count($array); $i++){
  if ($array[$i] <= $key){
   $left_arr[] = $array[$i];
  }else{
 $right_arr[] = $array[$i];
}
}
$left_arr = quickSort($left_arr);
$right_arr = quickSort($right_arr);
return array_merge($left_arr, array($key), $right_arr);
}
/**
* 按照元素的值进行排序
* strOrder 为排列的顺序 asc 升序 desc 降序
*/
function sortByVal($arr,$strOrder='asc')
{
if(!is_array($arr) || count($arr)==0)
{
return $arr;
}
$arrReturn = array();
foreach($arr as $key=>$val)
{
$arrKey[] = $key;
$arrVal[] = $val;
}
$count = count($arrVal);
if($count)
{
//创建key的顺序数组
for($key=0;$key<$count;$key++)
{
$arrKeyMap[$key] = $key;
}
//对值进行排序
for($i=0;$i<$count;$i++)
{
for($j = $count-1; $j>$i;$j--)
{
//<从小到大排列 升降在这修改
$bol = $strOrder == 'asc' ? $arrVal[$j]<$arrVal[$j-1] : $arrVal[$j]>$arrVal[$j-1];
if($bol){
$tmp = $arrVal[$j];
$arrVal[$j] = $arrVal[$j-1];
$arrVal[$j-1] = $tmp;
//值的冒泡排序,引起key的数组的交互
$keytmp = $arrKeyMap[$j];
$arrKeyMap[$j] = $arrKeyMap[$j-1];
$arrKeyMap[$j-1] = $keytmp;
}
}
}
if(count($arrKeyMap))
{
foreach ($arrKeyMap as $val)
{
$arrReturn[] = $arrKey[$val];
}
}
return $arrReturn;
}
}
/**
* 使用原生的函数进行数组按照值进行排列
*/
function arraySortByVal($arr,$keys,$type='asc'){
$keysvalue = $new_array = array();
foreach ($arr as $k=>$v){
$keysvalue[$k] = $v[$keys];
}
if($type == 'asc'){
asort($keysvalue);
}else{
arsort($keysvalue);
}
reset($keysvalue);
foreach ($keysvalue as $k=>$v){
$new_array[$k] = $arr[$k];
}
return $new_array;
}

对于下面的2个对于array的值进行排序的方法一个是自己实现的一个是使用了原生的PHP函数的,其实排序对于少量数据一般就单页的数据量的数据还是可以的,如果涉及到大量的数据的排序,建议可以整合到MYSQL的基础类中来进行。

    
[2]php网上商城购物车设计代码分享
    来源: 互联网  发布时间: 2013-11-30
首先,购物车的数据库设计:
1. id
2. goods_id 商品ID
3. session_id 购物车ID
4. goods_sn 商品编码
5. goods_name 商品名称
6. shop_price 商品商城售价
7. goods_price 商品真实售价(与shop_price的区别在于,当打折的时候,shop_price是打折之前商品的售价,而goods_price是打折之后的)
8. goods_number 数量
9. weight 商品重量
10. goods_attr 商品属性(如颜色,尺码)
11. promote_code 促销编码(为商品促销,做的策略模式识别码)
12. is_promote 促销ID
13. stock_id 库存ID
数据库结构大概是这个样子。当然如果还有其他的需求,比如商品的返利积分,商品是否虚拟产品,商品是否代发货等等,可以另加标示符。这里就不一一举例了。
第二点,我们这个购物车要求是在用户不登陆状态下可以把商品添加到购物车内的,这也是最近非常流行的一种方式,所以在购物车数据库设计里面,就没有加入user_id这个字段,考虑到的是用户未登陆下也可以把商品放入购物车。
那么识别购物车到底是哪一位用户的话,就是需要用到session_id,是用户对应购物车的唯一识别码。生成这个码可以放在购物车对象Cart的构造函数里:
代码如下:

/**
* 购物车类购物方法
* @param string $cart_id 购物车ID
*/
public function __construct()
{
Zend_Session::start();
$this->_session = new Zend_Session_Namespace('ShopCart');
if(!isset($this->_session->session_id))
{
$this->_session->session_id = md5(uniqid(mt_rand(), true));
$this->_session->info = array();
}
$this->_cart_id = $this->_session->session_id;
}

凡事有利就有弊,这个设计的好处是未登录就可以使用购物车;不好处就是两人共用一台电脑,购物车无法判断商品到底是哪一个人的。
第三点,添加一个商品到购物车。
添加一个商品到购物车,在这里,我把它想成是两个动作。
第一个动作:添加商品到购物车数据库里面。
第二个动作:查找购物车所有商品,并显示出来。
首先是第一个动作:
代码如下:

/**
* 添加商品
*/
public function goodsAddAction()
{
// 添加商品使用get请求
$goods_id = $this->_getParam('goods_id');//商品ID
$goods_spec = $this->_getParam('filter_name');//商品属性(颜色,尺码)
$goods_number = $this->_getParam('goods_number');//商品数量
$promote_name = $this->_getParam('promote_name', 'Default');//促销策略
//获取购物车实例
$cartB = $this->_getCart();
$cartB->goodsAdd($goods_id, $goods_spec, $goods_number, $promote_name);
//添加成功,跳转到下一步,查找购物车所有商品,并显示出来。
$this->_showMessage(Bll_Context::isError() ? Bll_Context::getError() : '添加到购物篮成功!', Bll_Context::getRecirect('/orderv2'), 3);
}

上段代码第15行:
$cartB->goodsAdd($goods_id, $goods_spec, $goods_number, $promote_name);
这就是添加商品操作函数,这里面的$promote_name是促销的一个参数,具体是用策略模式来选用哪种促销策略,我准备在下一篇文章具体来讨论。这里只要知道是添加这个商品的基本信息,存入到购物车数据库里即可。
其次就是第二个动作:
代码如下:

/**
* 购物列表
*/
public function indexAction()
{
//获取购物车实例
$cartB = $this->_getCart();
//列出购物车内所有商品
$this->view->goods_list = $cartB->goodsViewList();
//获取用于显示规则消息的规则实例列表
$this->view->tips = $cartB->goodsTipRules();
//购物车内商品总数量
$this->view->total_number = $cartB->getTotalGoodsNumber();
//获取购物车内商品总货额
$this->view->total_amount = $cartB->getTotalAmount();
}

这里第一个和第二个动作必须是要分开的,因为用户也可以不添加商品直接点购物车。

下面是效果图:



第一次发帖,有什么不足,不清楚的,还请见谅。欢迎讨论!


    
[3]php后台多用户权限组思路与实现程序代码分享
    来源: 互联网  发布时间: 2013-11-30
adminconfig.php 这是后台系统中所有文件权限配置。
fun.php 这是一个功能函数
left.php 网站后台根据用户登录的ID来加载相对应的功能菜单
op.php 调用adminconfig.php 默认权限文件
opsava.php 保存用户权限成一个php文件
好了我们先来看看 fun.php文件吧。
代码如下:

<?
function findsub($keys ,$userid='abc' ) //此函数重要就是为了调用用户的权限信息
{
include('user/'.$userid.'.php');
foreach($bb as $key=>$submenu)
{
foreach($submenu as $subkey=>$menuitem)
{
if( $subkey == $keys )
{
return 1;
}
}
}
}
//下面为生成用户的php权限文件
//写入
function cache_write($name, $var, $values) {
$cachefile = 'op/www.hzhuti.com/'.$name.'.php';
$cachetext = "<?phprn".'$'.$var.'='.arrayeval($values)."rn?>";
if(!swritefile($cachefile, $cachetext))
{
exit("File: $cachefile write error.");
}
}
//数组转换成字串
function arrayeval($array, $level = 0) {
$space = '';
for($i = 0; $i <= $level; $i++) {
$space .= "t";
}
$evaluate = "Arrayn$space(n";
$comma = $space;
foreach($array as $key => $val) {
$key = is_string($key) ? '''.addcslashes($key, ''\').''' : $key;
$val = !is_array($val) && (!preg_match("/^-?d+$/", $val) || strlen($val) > 12) ? '''.addcslashes($val, ''\').''' : $val;
if(is_array($val)) {
$evaluate .= "$comma$key => ".arrayeval($val, $level + 1);
} else {
$evaluate .= "$comma$key => $val";
}
$comma = ",n$space";
}
$evaluate .= "n$space)";
return $evaluate;
}
//写入文件
function swritefile($filename, $writetext, $openmod='w') {
if(@$fp = fopen($filename, $openmod)) {
flock($fp, 2);
fwrite($fp, $writetext);
fclose($fp);
return true;
} else {
exit("File: $filename write error.");
return false;
}
}
?>

adminconfig.php 后台权限配置文件,以一个数组形式保存
代码如下:

<?
$menus = array(
'news' => array(
'caption'=>'资讯管理',
'icon'=>'admin/icon_15.gif',
'sub' => array(
'newsaddtype' => array('caption' => '分类增加', 'url' => 'news/addtype.php'),
'newstypemange' => array('caption' => '分类管理', 'url' => 'news/typemange.php'),
'newsnewsend' => array('caption' => '发布资讯', 'url' => 'news/newsend.php'),
'newsnewmange' => array('caption' => '资讯管理', 'url' => 'news/newmange.php'),
'newscomments' => array('caption' => '评论管理', 'url' => 'news/comments.php'),
),
),
'ask' => array(
'caption'=>'问卷调查',
'icon'=>'admin/icon_15.gif',
'sub' => array(
'voteadmin_subject_add' => array('caption' => '添加投票主题', 'url' => 'vote/admin_subject_add.php'),
'voteadmin_subject' => array('caption' => '管理投票主题', 'url' => 'vote/admin_subject.php'),
'voteadmin_title_add' => array('caption' => '添加投票问题', 'url' => 'vote/admin_title_add.php'),
'voteadmin_title' => array('caption' => '管理投票问题', 'url' => 'vote/admin_title.php'),
'voteadmin_question_add' => array('caption' => '添加投票答案', 'url' => 'vote/admin_question_add.php'),
'voteadmin_question' => array('caption' => '管理投票答案', 'url' => 'vote/admin_question.php'),
'voteadmin_system' => array('caption' => '投票初始配置', 'url' => 'vote/admin_system.php')
),
),
'ads' => array(
'caption'=>'广告管理',
'icon'=>'admin/icon_15.gif',
'sub' => array(
'ada' => array('caption' => '增加广告', 'url' => 'ada.php'),
'adm' => array('caption' => '广告管理', 'url' => 'adm.php'),
'flashadd' => array('caption' => '焦点图广告增加', 'url' => 'flashadd.php'),
'flashad' => array('caption' => '焦点图广告管理', 'url' => 'flashad.php')
),
),
'mange' => array(
'caption'=>'系统管理员',
'icon'=>'admin/icon_15.gif',
'sub' => array(
'adminuser' => array('caption' => '管理员添加', 'url' => 'adminuser.php'),
'modpass' => array('caption' => '密码修改', 'url' => 'modpass.php')
),
),
);
?>

left.php文件很简单就是根据用户登录后ID读出权限
代码如下:

<?
$userid = $_SESSION['adminid'];
include("op/admincofig.php");
include("op/ www.hzhuti.com /".$userid.".php");
foreach($bb as $key=>$submenu)
{
echo "<tr><td bgcolor="#D879A7" > nr <font color="#EA6A8D" face="Webdings"></font><b>".$menus[$key]['caption']."</b><br /></td></tr> nr <tr ><td bgcolor="F5E8F1">";
foreach($submenu as $subkey=>$menuitem)
{
$tmparr = explode("|",$menuitem);
echo "<font color="#EA6A8D" face="Webdings">4</font><a href='".$tmparr[1]."' target="mainframe">".$tmparr[0]."</a><br> nr";
}
echo "</td></tr> nr ";
}

op.php这个文件就是要调用我们的adminconfig.php文件,然后利用fun.php文件中函数把提供过来的数据保存成数组如图

 

点击保存我们调用了opsava.php 文件,代码如下

代码如下:

<?
include("op/fun.php");
if( $_POST )
{
$sarray = $_POST ;
cache_write($userid,'bb',$sarray);//写入缓存
echo "<script>alert('编辑保存成功!');location='op.php?userid=".$userid."';</script>";
}
?>

保存成功后文件内容如
代码如下:

<?php
$bb=Array
(
'member' => Array
(
'user_search' => '会员升级管理|user_search.php'
),
'membercy' => Array
(
'cyuser_search' => '会员升级管理|cyuser_search.php',
'cyuser_search5' => '交友会员|cyuser_search.php?grade=5'
),
'userid' => 7,
'button' => '保存编辑'
)
?>

这样的话我们的left只要加载 7.php文件就只会显示这里在的文件,这样一个基本的后台权限就完成了。

    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3