PHP冒泡排序算法详解

 更新时间:2016年11月25日 15:47  点击:1590
在学习时我们经常会被老师拿几个数字来让大家进行各种排序,下面我来给各位同学介绍一下PHP冒泡排序算法,大家可直接合去给你老题师哈。

排序实现过程如下:
49   38   65   97   76   13   27
38   49   65 97   76   13   27               比较第1个和第2个数,小的放前边,大的放后边 38   49   65   97   76   13   27               比较第2个和第3个数,小的放前边,大的放后边 38   49   65   97   76   13   27               比较第3个和第4个数,小的放前边,大的放后边 38   49   65   76   97   13   27               比较第4个和第5个数,小的放前边,大的放后边 38   49   65   76   13   97   27               比较第5个和第6个数,小的放前边,大的放后边 38   49   65   76   13   27   97               比较第6个和第7个数,小的放前边,大的放后边 至此,第一趟比较结束,得到以下排序: 38   49   65   76   13   27   97  
然后按照第一趟排序的方法继续比较,直到完成排序。

列1

 代码如下 复制代码

$arr = array(345,4,17,6,52,16,58,69,32,8,234);
for($i=1;$i<count($arr);$i++){
for($j=count($arr)-1;$j>=$i;$j--){
if($arr[$j]<$arr[$j-1]){
$temp = $arr[$j-1];
$arr[$j-1] = $arr[$j];
$arr[$j] = $temp;
}
}
}

列2

 代码如下 复制代码

/**
 * php冒泡排序算法的实现
 * @param array $array 一维数组
 * @return array 排序过后的数组
 */
function bsort(array $array){
    $count = count($array);
    if($count == 0){
        return array();
    }elseif($count == 1){
        return $array;
    }elseif($count > 1){
        for($i=0;$i<$count;$i++){
            for($j=$count-1;$j>$i;$j--){
                if($array[$j]<$array[$j-1]){
                    $temp = $array[$j];
                    $array[$j] = $array[$j-1];
                    $array[$j-1] = $temp;
                }
            }
        }
        return $array;
    }else{
        return false;
    }
}

$arr = array(56,2,5,78,110,36,52,77,89,3,10);
print_r(bsort($arr));

本文章来给大家介绍如何在php中利用相关保代码来禁止浏览器缓存页面内容,在php中我们只要使用header命令带一些参数即可实例。

代码

 代码如下 复制代码

header("Cache-Control:no-cache,must-revalidate,no-store");   //这个no-store加了之后,Firefox下有效
header("Pragma:no-cache");
header("Expires:-1");

这个页面不缓存了,并且有个判断购物车商品为空就跳转到空购物车的页面,那么用户点击浏览器后退,回来之后,也直接到 购物车页面了。

PHP 禁止浏览器缓存页

 代码如下 复制代码

<?php   
  
//设置此页面的过期时间(用格林威治时间表示),只要是已经过去的日期即可。   
header("Expires: Mon, 26 Jul 1970 05:00:00 GMT");     
  
//设置此页面的最后更新日期(用格林威治时间表示)为当天,可以强制浏览器获取最新资料   
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");     
  
//告诉客户端浏览器不使用缓存,HTTP 1.1 协议   
header("Cache-Control: no-cache, must-revalidate");     
  
//告诉客户端浏览器不使用缓存,兼容HTTP 1.0 协议   
header("Pragma: no-cache");   
  
?>


但加上面三句在IE中有效,在FF中无效,在FF中在加上下面这句。

 代码如下 复制代码

<meta http-equiv="Cache-Control" content="no-store">


日我突发奇想,找到了一种在任何情况下都会显示最新的网页内容的方法,描述如下:

请将网页的链接改为:

http://xxx.yyy.zzz/page.php?rand=XXXXXXX

其中http://xxx.yyy.zzz/page.php是你的网页,rand是一个你不会用到的Qurey字串,XXXXXXX是一个随机字串。


其它的如asp,jsp设置方法

ASP:

 代码如下 复制代码

response.expires=0
response.addHeader("pragma","no-cache")
response.addHeader("Cache-Control","no-cache, must-revalidate")

JSP:

 代码如下 复制代码

response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);

在php中无限分类是我们在实际开发中经常用到的一种数据结构,一般我们称之为树形结构,像我网站的分类php教程有php入门,正则等等分类,这种是二级不是无限级了,如果是无限级就可以在子类下加子类了。

我们先来看我实现无限分类的具体过程。

题设:类似淘宝的商品分类,可以在任意分类设置其子类。
 

一、创建`type`数据表

 代码如下 复制代码

`id` 自增长

`fid` int(11) 默认(0) ,父节点id

`name` varchar(50),分类名称

CREATE TABLE `type` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `fid` int(11) NOT NULL DEFAULT '0',
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
)

二、添加

我们先添加几个顶级分类

 代码如下 复制代码

INSERT INTO `type` (`id`, `fid`, `name`) VALUES (NULL, '0', '手机');
INSERT INTO `type` (`id`, `fid`, `name`) VALUES (NULL, '0', '电脑');
INSERT INTO `type` (`id`, `fid`, `name`) VALUES (NULL, '0', '鞋子');
INSERT INTO `type` (`id`, `fid`, `name`) VALUES (NULL, '0', '衣服');这里fid=0是代表顶级分类

 

接着我们为{电脑}添加几个个子分类

 代码如下 复制代码

INSERT INTO `type` (`id`, `fid`, `name`) VALUES (NULL, '2', '台式'), (NULL, '2', '笔记本');这里fid=2,

2这个id是分类{电脑}的id,如果是添加{鞋子}的子分类则fid=3

同理我们为{笔记本}添加子分类则fid=6

 代码如下 复制代码

INSERT INTO `type` (`id`, `fid`, `name`) VALUES (NULL, '6', 'ausu'), (NULL, '6', 'hp');

三、删除

如果我们想删除{笔记本}这个分类,很简单

DELETE FROM `type` WHERE `id`=6{笔记本}的子分类我们也要记得做相应的处理

 代码如下 复制代码


function del($fid) {
    $sql="SELECT * FROM `type` WHERE `fid`=$fid";
    $rs=mysql_query($sql);
   
    for ($i = 0; $i < count($rs); $i++) {
        $sql="DELETE FROM `type` WHERE `id`={$rs[$i]['id']}";
        mysql_query($sql);
       
        del($rs['id']);//递归
    }
}

del(6);//执行操作这里你也许你会疑惑为什么那么麻烦用递归,而不是直接这样删除

DELETE FROM `type` WHERE `fid`=6这样我们不就可以直接删除{ausu}、{hp}?但是假设{ausu}有一个子分类{a1},{a1}也有一个子分类{a2},如果不用递归我们就无法彻底删除数据。

 

三、查找

1.查找{电脑}的子分类

SELECT * FROM `type` WHERE `fid`=22.查找{电脑}的所有子分类

 代码如下 复制代码


function sel($fid) {
    $sql="SELECT * FROM `type` WHERE `fid`=$fid";
    $rs=mysql_query($sql);
   
    for ($i = 0; $i < count($rs); $i++) {
        echo $rs[$i]['name'];
       
        sel($rs[$i]['id']);//递归
    }
}

sel(2);

四、实际数据应用

在数据表添加一个字段`tid`,字段值为记录所属分类`type`表的id。必须是id不能是name,因为name的值可能会改变。

例如查询属于{电脑}分类的商品

 代码如下 复制代码

SELECT * FROM `goods` WHERE `tid`=2


下面再看个实例,直接操作数组

 

 代码如下 复制代码

<?php
$rows = array(
    array(
        'id' => 1,
        'name' => 'dev',
        'parentid' => 0
    ),
    array(
        'id' => 2,
        'name' => 'php',
        'parentid' => 1
    ),
    array(
        'id' => 3,
        'name' => 'smarty',
        'parentid' => 2
    ),
    array(
        'id' => 4,
        'name' => 'life',
        'parentid' => 0
    ),
    array(
        'id' => 5,
        'name' => 'pdo',
        'parentid' => 2
    ),
    array(
        'id' => 6,
        'name' => 'pdo-mysql',
        'parentid' => 5
    ),
    array(
        'id' => 7,
        'name' => 'java',
        'parentid' => 1
    )
);

// 72648
// 84072

function findChild(&$arr,$id){
 
    $childs=array();
     foreach ($arr as $k => $v){
         if($v['parentid']== $id){
              $childs[]=$v;
  
         }
       
    }
     
    return $childs;
   
   
}
function build_tree($root_id){
    global $rows;
    $childs=findChild($rows,$root_id);
    if(empty($childs)){
        return null;
    }
   foreach ($childs as $k => $v){
       $rescurTree=build_tree($v[id]);
       if( null !=   $rescurTree){
       $childs[$k]['childs']=$rescurTree;
       }
   }
    return $childs;
}

 
$tree=build_tree(0);

echo memory_get_usage();

print_r($tree);


?>

我自己用的可以做那种下拉效果并带有级数的效果

 代码如下 复制代码


function dafenglei_select($m,$id, $fenlei ){
 global $menu;
 $n = str_pad('',$m,'-',STR_PAD_RIGHT);
 $n = str_replace("-","&nbsp;&nbsp;&nbsp;",$n);
 for($i=0;$i<count($fenlei);$i++){
 
  if($fenlei[$i]['classid']==$id){
     $menu .= "<option value="".$fenlei[$i]['id']."">".$n."|—".$fenlei[$i]['name']."</option>n";
   }
   $this->dafenglei_select($m+1,$fenlei[$i]['id'], $fenlei );
  }
 }
 return $menu;
}

dafenglei_select(0,0, $fenlei );

$fenlei  无限分类数组 $id是选择从哪个分类开始 写0代表顶级开始分,只要把数组放进去就可以分了

本文章来给大家介绍一些常用见的php 统计计算中文汉字字数代码,有需要了解的朋友可进入参考。

用ASCII码判断。

 代码如下 复制代码
<?
$str="abcdefg中华人民共和国中国人民解放军中国共产党中国人民";
$num=strlen($str); //$num字串长度。
echo $num."<br>";
for($i=0;$i<$num;$i++)
if(ord(substr($str,$i,1))>0xa0) $j++;
echo $j/2; //$j/2 汉字数。
?>


应该这样剥除所有字母数字和标点,空格。

代码:

 代码如下 复制代码

<?php

$testStr = '我没有告诉你,你就千万不要乱guess, 这样可不good!';
$testStr = eregi_replace("[[:alnum:]]|[[:punct:]]|[[:space:]]",'',$testStr);
echo($testStr);
echo ('字符串中所有中文字数为:'.mb_strlen($testStr));
?>


#计算中英文混合字符串的长度

 代码如下 复制代码

function ccStrLen($str)
{
$ccLen=0;
$ascLen=strlen($str);
$ind=0;
$hasCC=ereg("[xA1-xFE]",$str); #判断是否有汉字
$hasAsc=ereg("[x01-xA0]",$str); #判断是否有ASCII字符
if($hasCC && !$hasAsc) #只有汉字的情况
return strlen($str)/2;
if(!$hasCC && $hasAsc) #只有Ascii字符的情况
return strlen($str);
for($ind=0;$ind<$ascLen;$ind++)
{
if(ord(substr($str,$ind,1))>0xa0)
{
$ccLen++;
$ind++;
}
else
{
$ccLen++;
}
}
return $ccLen;
}
function ccStrLeft($str,$len) #从左边截取中英文混合字符串
{
$ascLen=strlen($str); if($ascLen<=$len) return $str;
$hasCC=ereg("[xA1-xFE]",$str); #同上
$hasAsc=ereg("[x01-xA0]",$str);
if(!$hasCC) return substr($str,0,$len);
if(!$hasAsc)
if($len & 0x01) #如果长度是奇数
return substr($str,0,$len+$len-2);
else
return substr($str,0,$len+$len);
$cind=0;$flag=0;
while($cind<$ascLen)
{
if(ord(substr($str,$cind,1))<0xA1) $flag++;
$cind++;
}
if($flag & 0x01)
return substr($str,0,$len);
else
return substr($str,0,$len-1);
}

有时我们会碰到上传文件时发现太大的上传不了,下面我来给大家介绍修改PHP上传文件大小限制的方法有需要了解的朋友可参考。

php.ini中进入修改

file_uploads = on ;是否允许通过HTTP上传文件的开关。默认为ON即是开
upload_tmp_dir ;文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹
upload_max_filesize = 8m ;望文生意,即允许上传文件大小的最大值。默认为2M
post_max_size = 8m ;指通过表单POST给PHP的所能接收的最大值,包括表单里的所有值。默认为8M


利用.htaccess文件

htaccess里写入

php_value post_max_size 12m

php_value upload_max_filesize 12m

php_value max_execution_time 120

php_value max_input_time 240


但在php中,默认的该页最久执行时间为 30 秒.就是说超过30秒,该脚本就停止执行

这就导致出现 无法打开网页的情况.这时我们可以修改 max_execution_time

在php.ini里查找

max_execution_time

默认是30秒.改为

max_execution_time = 0

0表示没有限制

另一种方法是可以在php程序中加入

set_time_limit();

来设定页面最久执行时间.

set_time_limit(0);//0表示没有限制


另外要说明的是,post_max_size 大于 upload_max_filesize 为佳.

 下面,我们简要介绍一下PHP文件上传涉及到的一些参数:

·  file_uploads  是否允许通过HTTP上传文件的开关,默认为ON,即是:允许upload_tmp_dir   用来说明PHP上传的文件放置的临时目录,要想上传文件,得保证服务器没有关闭临时文件和有对文件夹的写权限,如果未指定则PHP使用系统默认值。upload_max_filesize  允许上传文件大小的最大值,默认为2Mpost_max_size 控制在采用POST方法进行一次表单提交中PHP所能够接收的最大数据量。如果希望使用PHP文件上传功能,则需要将此值改为比upload_max_filesize要大。

· max_input_time  以秒为单位对通过POST、GET以及PUT方式接收数据时间进行限制。如果应用程序所运行环境处在低速链路上,则需要增加此值以适应接收数据所需的更多时间。
·  memory_limit  为了避免正在运行的脚本大量使用系统可用内存,PHP允许定义内存使用限额。通过memory_limit变量来指定单个脚本程序可以使用的最大内存容量变量memory_limit的值应当适当大于post_max_size的值 。

·  max_execution_time 设置了在强制终止脚本前PHP等待脚本执行完毕的时间,此时间以秒计算。当脚本进入了一个无限循环状态时此变量非常有用。然而,当存在一个需要很长时间完成的合法活动时(例如上传大型文件),这项功能也会导致操作失败。在这样的情况下必须考虑将此变量值增加,以避免PHP在脚本正在执行某些重要过程的时候将脚本关闭

[!--infotagslink--]

相关文章

  • C#几种排序算法

    作者:Sabine 【导读】本文介绍了C#的四种排序算法:冒泡排序、选择排序、插入排序和希尔排序  冒泡排序 using System; namespace BubbleSorter { public class Bubb...2020-06-25
  • 经典实例讲解C#递归算法

    这篇文章主要用实例讲解C#递归算法的概念以及用法,文中代码非常详细,帮助大家更好的参考和学习,感兴趣的朋友可以了解下...2020-06-25
  • 图文详解Heap Sort堆排序算法及JavaScript的代码实现

    这篇文章以图文详解Heap Sort堆排序算法及JavaScript的代码实现,堆排序算法基于类二叉树的堆数据结构,需要的朋友可以参考下...2016-05-05
  • C#中实现任意List的全组合算法代码

    这篇文章主要是介绍了.net C# 实现任意List的全组合算法实现代码,需要的朋友可以参考下...2020-06-25
  • 同时兼容JS和C#的RSA加密解密算法详解(对web提交的数据加密传输)

    这篇文章主要给大家介绍了关于同时兼容JS和C#的RSA加密解密算法,通过该算法可以对web提交的数据进行加密传输,文中通过图文及示例代码介绍的非常详细,需要的朋友们可以参考借鉴,下面来一起看看吧。...2020-06-25
  • js实现数组冒泡排序、快速排序原理

    这篇文章主要为大家详细介绍了js实现数组冒泡排序、快速排序的原理,感兴趣的小伙伴们可以参考一下...2016-03-10
  • JS实现的随机排序功能算法示例

    这篇文章主要介绍了JS实现的随机排序功能算法,结合具体实例形式分析了javascript常用的排序算法实现技巧,需要的朋友可以参考下...2017-06-15
  • C#常用数据结构和算法总结

    这篇文章主要介绍了C#常用数据结构和算法,这里我们总结了一些知识点,可以帮助大家理解这些概念。...2020-06-25
  • 分享javascript实现的冒泡排序代码并优化

    本文给大家汇总介绍了几个个人收藏的JavaScript实现冒泡排序的代码,都是非常的不错,有需要的小伙伴可以参考下...2016-06-12
  • C++实现的O(n)复杂度内查找第K大数算法示例

    这篇文章主要介绍了C++实现的O(n)复杂度内查找第K大数算法,结合实例形式分析了算法的原理以及具体实现方法,需要的朋友可以参考下...2020-04-25
  • c# 实现位图算法(BitMap)

    这篇文章主要介绍了c# 如何实现位图算法(BitMap),文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-11-03
  • 一篇文章带你搞懂Vue虚拟Dom与diff算法

    这篇文章主要给大家介绍了关于Vue虚拟Dom与diff算法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-08-26
  • R语言关于随机森林算法的知识点详解

    在本篇文章里小编给大家整理的是一篇关于R语言关于随机森林算法的知识点详解内容,有兴趣的朋友们可以跟着学习下。...2021-05-13
  • C++并查集亲戚(Relations)算法实例

    这篇文章主要介绍了C++并查集亲戚(Relations)算法,实例分析了并查集亲戚算法的原理与实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-04-25
  • C/C++实现八大排序算法汇总

    这篇文章主要为大家详细介绍了C/C++实现八大排序算法汇总,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-04-25
  • 基于稀疏图上的Johnson算法的详解

    本篇文章介绍了,稀疏图上的Johnson算法的详解。需要的朋友参考下...2020-04-25
  • C# URL短地址压缩算法及短网址原理解析

    这篇文章主要介绍了C# URL短地址压缩算法及短网址原理解析,本文重点给出了算法代码,需要的朋友可以参考下...2020-06-25
  • VC++实现选择排序算法简单示例

    这篇文章主要介绍了VC++实现选择排序算法简单示例,代码简洁易懂,有助于读者对数据结构与算法的学习,需要的朋友可以参考下...2020-04-25
  • 深入浅析React中diff算法

    React 最为核心的就是 Virtual DOM 和 Diff 算法,diff算法的基础是Virtual DOM,接下来通过本文给大家介绍React中diff算法的相关知识,对React中diff算法感兴趣的朋友跟随小编一起学习下吧...2021-05-19
  • php回溯算法计算组合总和的实例代码

    在本篇文章里小编给大家整理的是一篇关于php回溯算法计算组合总和的实例代码,有需要的朋友们可以学习参考下。...2021-07-14