php中数组排序各种方法
数组的排序方法
分为两在类:
1、内(内存)部排序
2、外部排序(数据量很大,内存放不下,需要借助外部
存储)
----------------
排序sorting是一个程序员的基本功
一:内部排序
(1)交换式排序
1、冒泡法
数组默认的传递是值传递,而不是地址传递
后面将讲到对象类型,对象默认的传递就是地址传递
//优化,将冒泡排序法封装成函数,利于以后使用
代码如下 | 复制代码 |
function bubbleSort(&$myarr){ } $arry=array(2,6,-4,7,9,0); |
2、快速排序法(神奇的快速,涉及到递归)
3、选择排序法
代码如下 | 复制代码 |
function selectSort(&$myarr){ for($j=$i+1;$j<count($myarr);$j+ $minval=$myarr[$j]; } } } |
4、插入排序法
查询速度:冒泡排序法<选择排序法<插入排序法
个人最喜欢用的是交换排序了,就是大家说的泡泡排序法了,这种方法比较好用,但不适于大数据量的排序。
在php+mysql中要实现分页相对很简单,只要获取page再X 每页几条记录然后再利用limit n,M就可以完美的实现分页了,本实例讲述的很清楚有需要的同学参考下。项目结构:
运行效果:
数据库连接代码
代码如下 | 复制代码 |
<?php |
这里是个比较重要的分享核心函数了
代码如下 | 复制代码 |
<?php //URL分析: //开始分页导航条代码: $pagenav .= " <a href='$url=1'>首页</a> ";
|
list.php
数据库查询记录并生成sql查询语句
代码如下 | 复制代码 |
<?php include("conn.php"); $pagesize=5; 5 $url=$_SERVER["REQUEST_URI"]; $url=parse_url($url); $url=$url[path]; $numq=mysql_query("SELECT * FROM `test`"); $num = mysql_num_rows($numq); if($_GET[page]){ $pageval=$_GET[page]; $page=($pageval-1)*$pagesize; $page.=','; } if($num > $pagesize){ if($pageval<=1)$pageval=1; echo "共 $num 条". 21 " <a href=$url?page=".($pageval-1).">上一页</a> <a href=$url?page=".($pageval+1).">下一页</a>"; } $SQL="SELECT * FROM `test` limit $page $pagesize "; $query=mysql_query($SQL); while($row=mysql_fetch_array($query)){ echo "<hr><b>".$row[name]." | ".$row[sex]; } ?> |
分页公式:(当前页数-1)*每页条数,每页条数
代码如下 | 复制代码 |
sql语句:select * from test_table limit ($page-1)*$pageSize,$pageSize; |
总结:
不管是在什么程序开发中分开都是一个原是从X条开始取N条,这样就只读几条了,而在mysql中有limit函数来操作,如 limit 1,5 就是从第一条取5条了。
再来介绍下核心代码,这里获取分页码,再Xpagesize代码如下
代码如下 | 复制代码 |
if($_GET[page]){ $pageval=$_GET[page]; $page=($pageval-1)*$pagesize; $page.=','; } if($num > $pagesize){ if($pageval<=1)$pageval=1; |
在mysql+php做分成相对要简单很多了,因为有了limit
引用文件的方法有两种:require 及 include。两种方式提供不同的使用弹性。
require 的使用方法如 require("MyRequireFile.php"); 。这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。
include 使用方法如 include("MyIncludeFile.php"); 。这个函数一般是放在流程控制的处理部分中。PHP 程序网页在读到 include 的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化。
_once 后缀表示已加载的不加载
1.报错
include引入文件的时候,如果碰到错误,会给出提示,并继续运行下边的代码
require引入文件的时候,如果碰到错误,会给出提示,并停止运行下边的代码
注:在 PHP 4.3.5 之前,包含文件中的语法错误不会导致程序停止,但从此版本之后会。
2.条件引用
include()与require()的功能相同,用法上却有一些不同,include()是有条件包含函数,而require()则是无条件包含函数,
例如下面例子,如果变量$somg为真,则将包含文件somefile.php:
代码如下 | 复制代码 |
if($some){ include 'somefile.php'; } |
但无论$some取何值,下面的代码将把文件somefile.php包含进文件里:
代码如下 | 复制代码 |
if($something){ require 'somefile.php'; } |
下面的例子充分说明了这两个函数之间的不同
代码如下 | 复制代码 |
$i = 1; while ($i < 3) { require "somefile.$i.php"; $i++; } |
可以从以上这段代码中看出,每一次循环的时候,程序都将把同一个文件包含进去,很显然这不我们想要的,可以看出这段代码希望在每次循环时,
将不同的文件包含进来,如果要完成这个功能,只能使用函数include()
代码如下 | 复制代码 |
$i = 1; while ($i < 3) { include "somefile.$i.php"; $i++; } |
3.require用相对路径的时候
当A引用B,而B又引用了其他文件C时,C的路径如果是相对路径,则是相对于A的路径,而不是相对于B的'
4.require_once() 语句在脚本执行期间包括并运行指定文件。此行为和 require() 语句类似,唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。
include_once() 语句在脚本执行期间包括并运行指定文件。此行为和 include() 语句类似,唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。如同此语句名字暗示的那样,只会包括一次。
5..文件引用方式
include有返回值,而require没有
代码如下 | 复制代码 |
$login = include(’test.php’); if(!empty($login)) { echo “文件包含成功”; } else { echo “文件包含失败”; } |
include()执行时需要引用的文件每次都要进行读取和评估,
require()执行时需要引用的文件只处理一次(实际上执行时需要引用的文件内容替换了require()语句)
可以看出若有包含这些指令之一的代码和可能执行多次的代码,则使用require()效率比较高,
若每次执行代码时相读取不同的文件或者有通过一组文件叠代的循环,就使用include(),
可以给想要包括的文件名设置变量,当参数为 include()时使用这个变量
代码如下 | 复制代码 |
<?
|
总结
incluce在用到时加载
require在一开始就加载
_once后缀表示已加载的不加载
php系统在加载php程序时有一个伪编译过程,可使程序运行速度加快。但incluce的文档仍为解释执行
include的文件中出错了,主程序继续往下执行
require的文件出错了,主程序也停了
所以包含的文件出错对系统影响不大的话(如界面文件)就用include,否则用require
以下文档也适用于 require()。这两种结构除了在如何处理失败之外完全一样。include() 产生一个警告而 require() 则导致一个致命错误。换句话说,如果你想在遇到丢失文件时停止处理页面就用 require()。include() 就不是这样,脚本会继续运行。同时也要确认设置了合适的 include_path。
require()函数用给定文件的内容取代它本身,这一代替过程发生在PHP引擎编译代码期间,而不是在执行期间进行,它不象include()那样会首先进行计算。require()函数更多地用在静态元素中,而include()更多地用于动态元素中。与include_once()类似的是,require_once()将首先检查是否已经插入给定的代码,如果代码已经存在,就不再插入了。
无限分类就像windows下新建一个文件夹,在新建的文件夹下又可以新建一个文件夹,这样无限循环下去,无限分类也是这样,父类可以分出它子类,子类又可以分出它的子类,这样一直无限循环下去
代码如下 | 复制代码 |
--
--
CREATE TABLE `class` (
<?php function sort_s($id){ |
总结原理
如何把它的各个分类一一列出来呢?
首先我们假设有这样的一个三级分类,新闻→PHP新闻→PHP6.0出来了。
如果我们要查找“PHP6.0出来了”这条新闻,我们先点击新闻,然后再点击PHP新闻
就可以查出来了,也就是说我们可以通过祖父类一级一级地往下找,反过来我们只要
知道一个子类的父类,就可以把它查找出来了。这样我们在设计数据库时就可以多设
计一个父类id的字段就可以实现无限分类的功能了
文章分析介绍了多种利用正则提取图片中的地图方法,看了下面所有实例我都少不了preg_match_all这个函数,有需要的朋友可以参考一下。代码如下 | 复制代码 |
<?php function getimages($str) { $match_str = "/((http://)+([^ rn()^$!`"'|[]{}<>]*)((.gif)|(.jpg)|(.bmp)|(.png)|(.GIF)|(.JPG)|(.PNG)|(.BMP)))/"; preg_match_all ($match_str,$str,$out,PREG_PATTERN_ORDER); return $out; } ?> |
/<img.*srcs*=s*["|']?s*([^>"'s]*)/i
,我使用kindeditor保存文章,但是需要取出第N个图片的地址作为文章的标志图片,文章代码(内容的html)保存到数据库一个字段,然后图片地址保存到另外一个字段.我就是使用上面的正则解决的.
我说明下,上面的地址是直接获取img标签内src属性的值.在使用该正则的php页面访问该路径如果能找到图片的话,可以直接使用,如果不能,你可以使用preg_match_all将所有地址先保存到数组,然后处理路径,比如获取文件名称(不含路径部分),然后重新组成url,再删除图片.
我的例子:
代码如下 | 复制代码 |
preg_match_all("/<img.*srcs*=s*["|']?s*([^>"'s]*)/i",str_ireplace("\","",$content),$arr); |
呵呵 我的内容部分被php给加上转义了,所以我需要先把去除,str_ireplace("\","",$content),然后将匹配的内容保存到$arr数组(二维的).
$arr[1]就是存储该路径的数组.
实例
代码如下 | 复制代码 |
<?php |
结果
代码如下 | 复制代码 |
array(5) { |
PHP正则匹配图片并给图片加链接详解
代码如下 | 复制代码 |
$newstext=preg_replace(preg_replace('/(<img[^>]+srcs*=s*”?([^>"s]+)”?[^>]*>)/im', ‘<a href=”$2″>$1</a>', $newstext); |
1.preg_replace和str_replace的区别:
str_replace只是纯字符替换,而preg_replace才是正则替换
2.$0,$1,$2等的说明:
$0指的是被整个模式所匹配的文本;
$1指的是首个 ( ) 引用的串;
$2指的是第二个()引用的串; 以此类推。
相关文章
- 在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
php 中file_get_contents超时问题的解决方法
file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25- 这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
- 相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
- php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
- 下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
- ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
- 本文章提供在量的数据中级操作实例有如对键名比较计算数组的差集 计算差集 给指定数组中插入一个元素 反转数组 交集赋值新的数组实例。 //定义回调函数 funct...2016-11-25
- 这篇文章主要介绍了C#二维数组基本用法,以实例形式分析了C#中二维数组的定义、初始化、遍历及打印等用法,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
intellij idea快速查看当前类中的所有方法(推荐)
这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02- 1.在没有设置默认值的情况下: 复制代码 代码如下:SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_timeFROM userinfoLEFT JOIN region ON userinfo.adm_regionid = region.id 结果:...2014-05-31
- Array数组在C#中同样是最基本的数据结构,下面为大家C#数组的常用操作方法小结,皆为细小的代码段,欢迎收看收藏...2020-06-25
js导出table数据到excel即导出为EXCEL文档的方法
复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht...2013-10-13- 下面一段代码给大家介绍php curl模拟post请求的示例代码,具体代码如下: <?php$uri = "http://www.cnblogs.com/test.php";//这里换成自己的服务器的地址// 参数数组$data = array ( 'name' => 'tanteng'// 'passwor...2015-11-24
- 批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
- 本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
- ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果̳...2017-07-06
安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法
手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21- 最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
- 单个字符分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab de...2020-06-25