<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_兴百放's Blogs</title><subtitle type="text">  尽自己最大努力，做好身边每一件事！</subtitle><id>http://feed.cnblogs.com/blog/u/22764/rss</id><updated>2011-09-16T11:03:33Z</updated><author><name>兴百放</name><uri>http://www.cnblogs.com/xbf321/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xbf321/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/22764/rss"/><entry><id>http://www.cnblogs.com/xbf321/archive/2011/09/16/2179144.html</id><title type="text">MYSQL命令行常用操作</title><summary type="text">显示数据库 mysql-&amp;gt;show databases; 创建数据库 mysql-&amp;gt;create database db; 删除数据库 mysql-&amp;gt;drop...</summary><published>2011-09-16T11:04:00Z</published><updated>2011-09-16T11:04:00Z</updated><author><name>兴百放</name><uri>http://www.cnblogs.com/xbf321/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xbf321/archive/2011/09/16/2179144.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xbf321/archive/2011/09/16/2179144.html"/><content type="html">&lt;p&gt;显示数据库&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mysql-&amp;gt;show databases;    &lt;br /&gt;创建数据库&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mysql-&amp;gt;create database db;     &lt;br /&gt;删除数据库&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mysql-&amp;gt;drop database db;     &lt;br /&gt;选择数据库&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mysql-&amp;gt;use db     &lt;br /&gt;创建表&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mysql-&amp;gt;create table mytable(name varchar(20),sex(char(1),birth date);     &lt;br /&gt;删除表&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mysql-&amp;gt;drop table mytable;     &lt;br /&gt;显示表的内容&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mysql-&amp;gt;show tables;     &lt;br /&gt;显示表的结构&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mysql-&amp;gt;describe mytable;     &lt;br /&gt;在一个表中增加一条字段&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mysql-&amp;gt;alter table yourtable add id int not null auto_increment, add primary key (id);     &lt;br /&gt;删除一个字段&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mysql-&amp;gt;alter table yourtable drop name ;     &lt;br /&gt;创建mysql帐户&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mysql&amp;gt; grant all privileges on *.* to &lt;a href="mailto:'123123'@'localhost'"&gt;'123123'@'localhost'&lt;/a&gt;&amp;#160; -&amp;gt; identified by '123123';     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mysql&amp;gt; GRANT SELECT,UPDATE ON *.* TO 'monty'@'%' (可以网络访问的账户) -&amp;gt;&amp;#160;&amp;#160; IDENTIFIED BY '123123';     &lt;br /&gt;更改已有帐户的密码&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mysql&amp;gt; grant all privileges on *.* to &lt;a href="mailto:'123123'@'localhost'"&gt;'123123'@'localhost'&lt;/a&gt;&amp;#160; -&amp;gt; identified by '123123';&amp;#160; mysql&amp;gt; flush privileges;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/xbf321/aggbug/2179144.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/xbf321/archive/2011/09/16/2179144.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/xbf321/archive/2011/09/16/2178959.html</id><title type="text">MySQL数据库导入导出详解[转发]</title><summary type="text">1. 概述 MySQL数据库的导入，有两种方法： 1) 先导出数据库SQL脚本，再导入； 2) 直接拷贝数据库目录和文件。 在不同操作系统或MySQL版本情况下，直接拷贝文件的方法可能会有不兼容的情况发生。 所以一般推荐用SQL脚本形式导入。下面分别介绍两种方法。 2. 方法一 SQL脚本形式 操作步骤如下： 2.1. 导出SQL脚本 在原数据库服务器上，可以用phpMyAdmi...</summary><published>2011-09-16T08:59:00Z</published><updated>2011-09-16T08:59:00Z</updated><author><name>兴百放</name><uri>http://www.cnblogs.com/xbf321/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xbf321/archive/2011/09/16/2178959.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xbf321/archive/2011/09/16/2178959.html"/><content type="html">&lt;p&gt;&lt;strong&gt;1. 概述&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;MySQL数据库的导入，有两种方法：&lt;/p&gt;  &lt;p&gt;1) 先导出数据库SQL脚本，再导入；&lt;/p&gt;  &lt;p&gt;2) 直接拷贝数据库目录和文件。&lt;/p&gt;  &lt;p&gt;在不同操作系统或MySQL版本情况下，直接拷贝文件的方法可能会有不兼容的情况发生。&lt;/p&gt;  &lt;p&gt;所以一般推荐用SQL脚本形式导入。下面分别介绍两种方法。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2. 方法一 SQL脚本形式&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;操作步骤如下：&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2.1. 导出SQL脚本&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;在原数据库服务器上，可以用phpMyAdmin工具，或者mysqldump命令行，导出SQL脚本。&lt;/p&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;   &lt;p&gt;&lt;strong&gt;2.1.1 用phpMyAdmin工具&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;导出选项中，选择导出“结构”和“数据”，不要添加“DROP DATABASE”和“DROP TABLE”选项。&lt;/p&gt;    &lt;p&gt;选中“另存为文件”选项，如果数据比较多，可以选中“gzipped”选项。&lt;/p&gt;    &lt;p&gt;将导出的SQL文件保存下来。&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;2.1.2 用mysqldump命令行&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;命令格式&lt;/p&gt;    &lt;p&gt;mysqldump -u用户名 -p 数据库名 &amp;gt; 数据库名.sql&lt;/p&gt;    &lt;p&gt;范例：&lt;/p&gt;    &lt;p&gt;mysqldump -uroot -p abc &amp;gt; abc.sql&lt;/p&gt;    &lt;p&gt;（导出数据库abc到abc.sql文件）&lt;/p&gt;    &lt;p&gt;提示输入密码时，输入该数据库用户名的密码。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;2.2. 创建空的数据库&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;通过主控界面/控制面板，创建一个数据库。假设数据库名为abc，数据库全权用户为abc_f。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2.3. 将SQL脚本导入执行&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;同样是两种方法，一种用phpMyAdmin（mysql数据库管理）工具，或者mysql命令行。&lt;/p&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;   &lt;p&gt;&lt;strong&gt;2.3.1 用phpMyAdmin工具&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;从控制面板，选择创建的空数据库，点“管理”，进入管理工具页面。&lt;/p&gt;    &lt;p&gt;在&amp;quot;SQL&amp;quot;菜单中，浏览选择刚才导出的SQL文件，点击“执行”以上载并执行。&lt;/p&gt;    &lt;p&gt;注意：phpMyAdmin对上载的文件大小有限制，php本身对上载文件大小也有限制，如果原始sql文件&lt;/p&gt;    &lt;p&gt;比较大，可以先用gzip对它进行压缩，对于sql文件这样的文本文件，可获得1:5或更高的压缩率。&lt;/p&gt;    &lt;p&gt;gzip使用方法：&lt;/p&gt;    &lt;p&gt;# gzip xxxxx.sql&lt;/p&gt;    &lt;p&gt;得到&lt;/p&gt;    &lt;p&gt;xxxxx.sql.gz文件。&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;2.3.2 用mysql命令行&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;命令格式&lt;/p&gt;    &lt;p&gt;mysql -u用户名 -p 数据库名 &amp;lt; 数据库名.sql&lt;/p&gt;    &lt;p&gt;范例：&lt;/p&gt;    &lt;p&gt;mysql -uabc_f -p abc &amp;lt; abc.sql&lt;/p&gt;    &lt;p&gt;（导出数据库abc到abc.sql文件）&lt;/p&gt;    &lt;p&gt;提示输入密码时，输入该数据库用户名的密码。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;3 方法二 直接拷贝&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;如果数据库比较大，可以考虑用直接拷贝的方法，但不同版本和操作系统之间可能不兼容，要慎用。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;3.1 准备原始文件&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;用tar打包为一个文件&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;3.2 创建空数据库&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;3.3 解压&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;在临时目录中解压，如：&lt;/p&gt;  &lt;p&gt;cd /tmp&lt;/p&gt;  &lt;p&gt;tar zxf mydb.tar.gz&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;3.4 拷贝&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;将解压后的数据库文件拷贝到相关目录&lt;/p&gt;  &lt;p&gt;cd mydb/&lt;/p&gt;  &lt;p&gt;cp * /var/lib/mysql/mydb/&lt;/p&gt;  &lt;p&gt;对于FreeBSD:&lt;/p&gt;  &lt;p&gt;cp * /var/db/mysql/mydb/&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;3.5 权限设置&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;将拷贝过去的文件的属主改为mysql:mysql，权限改为660&lt;/p&gt;  &lt;p&gt;chown mysql:mysql /var/lib/mysql/mydb/*&lt;/p&gt;  &lt;p&gt;chmod 660 /var/lib/mysql/mydb/*&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;来源：&lt;a title="http://echoright.blog.sohu.com/129835203.html" href="http://echoright.blog.sohu.com/129835203.html"&gt;http://echoright.blog.sohu.com/129835203.html&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/xbf321/aggbug/2178959.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/xbf321/archive/2011/09/16/2178959.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/xbf321/archive/2011/09/16/2178931.html</id><title type="text">国外达人收集的Cheet Sheet</title><summary type="text">涵盖了js,css,html,mysql,php等等的Cheet Sheet，做的很漂亮，关键是实用，特此收录一下。 原文如下： http://www.petefreitag.com/item/455.cfm Lets face it, unless you have a photographic memory, no developer can remember all the di...</summary><published>2011-09-16T08:43:00Z</published><updated>2011-09-16T08:43:00Z</updated><author><name>兴百放</name><uri>http://www.cnblogs.com/xbf321/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xbf321/archive/2011/09/16/2178931.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xbf321/archive/2011/09/16/2178931.html"/><content type="html">&lt;p&gt;涵盖了js,css,html,mysql,php等等的Cheet Sheet，做的很漂亮，关键是实用，特此收录一下。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;原文如下：&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.petefreitag.com/item/455.cfm" href="http://www.petefreitag.com/item/455.cfm"&gt;http://www.petefreitag.com/item/455.cfm&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Lets face it, unless you have a photographic memory, no developer can remember all the different functions, options, tags, etc. that exist. Documentation can be cumbersome at times, thats why I like cheat sheets. They are quick references that feature the most commonly forgotten things on a specific topic. You can print them out and hang them on your wall, or just keep them handy in your bookmarks for quick reference.&lt;/p&gt;  &lt;p&gt;I have rounded up over 30 cheatsheets that developers might find useful.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Web Development Cheat Sheets&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.addedbytes.com/javascript/javascript-cheat-sheet/"&gt;JavaScript&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.addedbytes.com/css/css-cheat-sheet/"&gt;CSS&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://home.tampabay.rr.com/bmerkey/cheatsheet.htm"&gt;CSS&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.petefreitag.com/cheatsheets/css/"&gt;CSS&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.addedbytes.com/resources/colour-chart/"&gt;Hex Codes&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.psacake.com/web/dy.asp"&gt;HTML&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://cdburnerxp.se/htmlcheatsheet.pdf"&gt;XHTML&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.cookwood.com/html/extras/entities.html"&gt;HTML Entities&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Databases / SQL Cheat Sheets&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.petefreitag.com/cheatsheets/sqlserver/"&gt;SQL Server / T-SQL&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.addedbytes.com/php/mysql-cheat-sheet/"&gt;MySQL&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://nparikh.freeshell.org/unix/mysql.php"&gt;MySQL&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.technochallenged.com/oracle-8-cheat-sheet.html"&gt;Oracle&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.3gwt.net/demo/SQL_redux.html"&gt;SQL&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.selectorweb.com/sql_sybase.html"&gt;Sybase&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Language Cheat Sheets&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.petefreitag.com/cheatsheets/coldfusion/"&gt;ColdFusion&lt;/a&gt; - work in progress &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.addedbytes.com/php/php-cheat-sheet/"&gt;PHP&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.zenspider.com/Languages/Ruby/QuickRef.html#36"&gt;Ruby&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.petefreitag.com/cheatsheets/regex/"&gt;Regular Expressions&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.digilife.be/quickreferences/QRC/JSP%20Syntax.pdf"&gt;JSP&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.petefreitag.com/cheatsheets/java/"&gt;Java&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.yukoncollege.yk.ca/%7Ettopper/COMP118/rCheatSheet.html"&gt;Python&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Version Control Cheat Sheets&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www-bcl.cs.unm.edu/computers/cvs.html"&gt;CVS&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.abbeyworkshop.com/howto/misc/svn01/"&gt;Subversion&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Other&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.googleguide.com/advanced_operators_reference.html"&gt;Google&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.ss64.com/nt/"&gt;Windows&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.pixelbeat.org/cmdline.html"&gt;Unix&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.rain.org/%7emkummel/unix.html"&gt;Unix&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.sloppycode.net/nix/"&gt;Unix&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.lagmonster.org/docs/vi.html"&gt;Vi&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://bullium.com/support/vim.html"&gt;Vim&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.addedbytes.com/cheat-sheets/mod_rewrite-cheat-sheet/"&gt;mod_rewrite&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.petefreitag.com/cheatsheets/ascii-codes/"&gt;ASCII Character Codes&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.thejackol.com/htaccess-cheatsheet/"&gt;htaccess&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Commercially Printed CheatSheets&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.visibone.com/"&gt;Visibone&lt;/a&gt; - javascript, browsers, colors, fonts, html. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.technochallenged.com/"&gt;TechnoChallenged&lt;/a&gt; - web dev, programming, os, software &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Am I missing any good ones? Feel free to post any others in the comments.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Updates:&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://juerd.nl/site.plp/perlcheat"&gt;Perl&lt;/a&gt; - thanks Dom. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.regxlib.com/CheatSheet.htm"&gt;Regex&lt;/a&gt; - thanks bjhanifin &lt;/li&gt;    &lt;li&gt;&lt;a href="http://search.cpan.org/%7Enwclark/perl-5.8.7/pod/perlcheat.pod"&gt;Perl&lt;/a&gt; - thanks Derek &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.cs.put.poznan.pl/csobaniec/Papers/svn-refcard.pdf"&gt;Subversion&lt;/a&gt; - nice reference card, thanks Andreas &lt;/li&gt;    &lt;li&gt;&lt;a href="http://people.debian.org/%7Edebacle/refcard/refcard-en-a4.pdf"&gt;Debian&lt;/a&gt; - thanks again Andreas &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.holub.com/goodies/uml/index.html"&gt;UML&lt;/a&gt; - Andreas again, thanks &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.petefreitag.com/cheatsheets/postgresql/"&gt;PostgreSQL&lt;/a&gt; - thanks for the suggestion frank. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.petefreitag.com/cheatsheets/xhtml/"&gt;XHTML / HTML&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://www.cnblogs.com/xbf321/aggbug/2178931.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/xbf321/archive/2011/09/16/2178931.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/xbf321/archive/2011/09/07/string-in-php.html</id><title type="text">PHP学习:字符串操作和正则表达式</title><summary type="text">主要内容：    字符串格式化；    用字符串函数连接和分隔字符串；    字符串比较；    使用字符串函数匹配和替换子字符串；    使用正则表达式；</summary><published>2011-09-07T06:05:00Z</published><updated>2011-09-07T06:05:00Z</updated><author><name>兴百放</name><uri>http://www.cnblogs.com/xbf321/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xbf321/archive/2011/09/07/string-in-php.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xbf321/archive/2011/09/07/string-in-php.html"/><content type="html">&lt;p&gt;主要内容：&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;字符串格式化；&lt;/li&gt;&#xD;
&lt;li&gt;用字符串函数连接和分隔字符串；&lt;/li&gt;&#xD;
&lt;li&gt;字符串比较；&lt;/li&gt;&#xD;
&lt;li&gt;使用字符串函数匹配和替换子字符串；&lt;/li&gt;&#xD;
&lt;li&gt;使用正则表达式；&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;&lt;strong&gt;字符串格式化&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1，去空格：trim()，ltrim()，rtrim()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;trim()函数去掉头尾两边的空格。&lt;/p&gt;&#xD;
&lt;p&gt;ltrim()函数去掉开始的空格。&lt;/p&gt;&#xD;
&lt;p&gt;rtrim()函数去掉结尾的空格。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2，格式化字符串：printf()，sprintf()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;printf()函数和sprintf()函数，和echo的功能相同，都会打印字符串。但是它们可以实现更复杂的格式（象C#中string.Format()类似）。&lt;/p&gt;&#xD;
&lt;p&gt;printf()和sprintf()原型如下：&lt;/p&gt;&#xD;
&lt;pre &gt;string sprintf(string format[,mixed args..]);&#xD;
void printf(string format[,mixed args...]);&lt;/pre&gt;&#xD;
&lt;p&gt;sprintf()返回格式化后的字符串。而printf直接将结果输出。它们两个的功能类似，所以就已printf()为例。&lt;/p&gt;&#xD;
&lt;pre &gt;$boy = "boy";&#xD;
echo "i am a $boy";&#xD;
echo '&amp;lt;br /&amp;gt;';&#xD;
printf("i am a %s",$boy);&lt;/pre&gt;&#xD;
&lt;p&gt;上面输出的结果一样。&lt;/p&gt;&#xD;
&lt;p&gt;其中format中的类型可以有以下几种：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xbf321/201109/201109061832054730.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="string-format-type" alt="string-format-type" src="http://images.cnblogs.com/cnblogs_com/xbf321/201109/201109061832062811.png" border="0" height="261" width="706" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;format中的所有转换类型都以%开始。如果想打印一个&amp;ldquo;%&amp;rdquo;符号，必须使用两个&amp;ldquo;%%&amp;rdquo;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3，改变字符串中的字符大小写&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;a).将字符转换为大写：strtoupper()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;pre &gt;$str = "i am a boy";&#xD;
echo strtoupper($str);&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;b).将字符转换为小写 ：strtolower()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;pre &gt;$str = "I Am A Boy";&#xD;
echo strtolower($str);&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;c).如果第一个字符是字母，就转换成大写：ucfirst()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;pre &gt;$str = "i am a boy";&#xD;
echo ucfirst($str);&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;d).将字符串中每个单词的第一个字母转成大写：ucwords()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;pre &gt;$str = "i am a boy";&#xD;
echo ucwords($str);&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;4，转义字符串&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;addslashes()函数就是把&amp;ldquo;转换成\&amp;rdquo;,或者把\转成双斜杠\\等等之类的操作。&lt;/p&gt;&#xD;
&lt;pre &gt;$str = '"i am a [\] boy."';&#xD;
echo addslashes($str);&lt;/pre&gt;&#xD;
&lt;p&gt;输出：\"i am a [\\] boy.\"&lt;/p&gt;&#xD;
&lt;p&gt;addslashes()函数相反的函数就是stripslashes()。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;5，编码字符串&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;htmlspecialchars()函数把&amp;amp;，&amp;lt;，&amp;gt;，&amp;ldquo;等等，编码成浏览器不能解释的字符。&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;strong&gt;用字符串函数连接和分隔字符串&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1，分隔字符串：explode()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;它的原型如下：&lt;/p&gt;&#xD;
&lt;pre &gt;array explode(string separator,string input[,int limit]);&lt;/pre&gt;&#xD;
&lt;p&gt;可以看出返回数组。使用如下：&lt;/p&gt;&#xD;
&lt;pre &gt;$str = "1,2,3,4,5";&#xD;
$arr = explode(',',$str);&#xD;
foreach($arr as $v){&#xD;
	echo $v.'&amp;lt;br /&amp;gt;';&#xD;
}&lt;/pre&gt;&#xD;
&lt;p&gt;返回1 2 3 4 5&lt;/p&gt;&#xD;
&lt;p&gt;既然有分隔就会有整合。不错，implode()和join()函数实现就是和explode()相反的操作。&lt;/p&gt;&#xD;
&lt;pre &gt;$str = "1,2,3,4,5";&#xD;
$arr = explode(',',$str);&#xD;
echo implode(',',$arr);&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2，截取字符串：substr()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;substr()函数的原型如下：&lt;/p&gt;&#xD;
&lt;pre &gt;string substr(string input,int start[,int length]);&lt;/pre&gt;&#xD;
&lt;p&gt;第二个参数表示截取的开始位置。&lt;/p&gt;&#xD;
&lt;p&gt;第三个参数表示截取的长度。&lt;/p&gt;&#xD;
&lt;p&gt;使用如下：&lt;/p&gt;&#xD;
&lt;pre &gt;$str = "i am a boy";&#xD;
echo substr($str,2);&lt;/pre&gt;&#xD;
&lt;p&gt;输出：am a boy&lt;/p&gt;&#xD;
&lt;p&gt;需要注意的是，第二个参数和第三个参数可以为负，如果为负，就意味着从后边开始。&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;function reverse_i($str){&#xD;
		for($i=1;$i&amp;lt;=strlen($str);$i++){&#xD;
			echo substr($str,-$i,1);&#xD;
		}&#xD;
		return;&#xD;
	}&#xD;
	reverse_i('word');&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;返回：drow;&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;strong&gt;字符串比较&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1，字符串排序：strcmp()，strcasecmp()，strnatcmp()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;strcmp()的原型如下：&lt;/p&gt;&#xD;
&lt;pre &gt;int strcmp(string str1,string str2);&lt;/pre&gt;&#xD;
&lt;p&gt;如果两个字符串相等，返回0；如果按字典顺序str1在str2后面就返回一个正数，反之。这个函数是区分大小写的。&lt;/p&gt;&#xD;
&lt;pre &gt;$str1 = "2";&#xD;
$str2 = "12";&#xD;
echo strcmp($str1,$str2);&lt;/pre&gt;&#xD;
&lt;p&gt;返回1，说明它是按字典顺序排列的，$str1的第一个字符大于$str2的第一个字符。&lt;/p&gt;&#xD;
&lt;p&gt;strcasecmp()函数除了不区分大小写之外，其他和strcmp()函数一样。&lt;/p&gt;&#xD;
&lt;p&gt;而strnatcmp()则是按照人们习惯的顺序进行排序。它也不区分大小写。&lt;/p&gt;&#xD;
&lt;pre &gt;$str1 = "2";&#xD;
$str2 = "12";&#xD;
echo strnatcmp($str1,$str2);&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Courier New;" face="Courier New"&gt;返回-1，说明12比2大。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2，获得字符串的长度：strlen()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;strlen(&amp;ldquo;hello&amp;rdquo;)，输出结果为5。&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;strong&gt;使用字符串函数匹配和替换子字符串&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1，在字符串中查找字符串：strstr()，strchr()，strrchr()和strissr()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这些函数看起来张得差不多，真是难记啊！~~&lt;/p&gt;&#xD;
&lt;p&gt;最常用的是strstr()函数，strchr()函数和strstr()函数时一样的，虽然感觉strchr()是查找一个字符的意思。&lt;/p&gt;&#xD;
&lt;p&gt;strstr()函数的原型如下：&lt;/p&gt;&#xD;
&lt;pre &gt;string strstr(string haystack,string needle);&lt;/pre&gt;&#xD;
&lt;pre &gt;第一个参数为整个字符串。&lt;/pre&gt;&#xD;
&lt;p&gt;第二个参数为需要查找的子字符串。&lt;/p&gt;&#xD;
&lt;p&gt;如果找到一个匹配，函数会从needle前面返回haystack,否则返回false。如果存在不止一个needle，返回的字符串从出现第一个needle的位置开始。&lt;/p&gt;&#xD;
&lt;p&gt;a).一个精确匹配&lt;/p&gt;&#xD;
&lt;pre &gt;$str1 = "To all, I am very sad to tell you that I&amp;rsquo;ve just been fired.It has been my pleasure to work with all of you and I wish you only the best going forward.";&#xD;
echo strstr($str1,'very');&lt;/pre&gt;&#xD;
&lt;p&gt;输出：very sad to tell you that I&amp;rsquo;ve just been fired.It has been my pleasure to work with all of you and I wish you only the best going forward.&lt;/p&gt;&#xD;
&lt;p&gt;b).多个匹配&lt;/p&gt;&#xD;
&lt;pre &gt;$str1 = "To all, I am very sad to tell you that I&amp;rsquo;ve just been fired.It has been my pleasure to work with all of you and I wish you only the best going forward";&#xD;
echo strstr($str1,'been');&lt;/pre&gt;&#xD;
&lt;p&gt;输出：been fired.It has been my pleasure to work with all of you and I wish you only the best going forward.&lt;/p&gt;&#xD;
&lt;p&gt;函数strstr()有两个变体。第一个是stristr()函数，它几乎和strstr()函数一样，但区别就是不区分大小写。&lt;/p&gt;&#xD;
&lt;p&gt;第二个是strrchr()函数，它几乎和strstr()一样，但会从最后出现needle的位置的前面返回字符串haystack。&lt;/p&gt;&#xD;
&lt;p&gt;此函数第二个参数为字符。&lt;/p&gt;&#xD;
&lt;pre &gt;$str1 = "To all, I am very sad to tell you that I&amp;rsquo;ve just been fired.It has been my pleasure to work with all of you and I wish you only the best going forward.";&#xD;
echo strrchr($str1,'w');&lt;/pre&gt;&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
  &lt;span style="font-family: Courier New;" face="Courier New"&gt;输出：ward. &lt;/span&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2，查找字符串的位置：strpos()，strrpos()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;strpos()函数和strstr()函数的操作类似。但它不是返回一个字符串，而是返回子字符串在整个字符串中的位置。我们平常使用的也是这个。而且比strstr()速度也快。&lt;/p&gt;&#xD;
&lt;p&gt;strpos()函数原型如下：&lt;/p&gt;&#xD;
&lt;pre &gt;int strpos(string haystack,string needle,int offset);&lt;/pre&gt;&#xD;
&lt;p&gt;第三个参数是可选的，标示开始搜索的位置。&lt;/p&gt;&#xD;
&lt;pre &gt;$str1 = "hello word";&#xD;
echo strpos($str1,'o');&lt;/pre&gt;&#xD;
&lt;p&gt;输出：4，位置是从0开始起。也可以用子字符串，这里只是出于演示目的。&lt;/p&gt;&#xD;
&lt;pre &gt;$str1 = "hello word";&#xD;
echo strpos($str1,'o',5);&lt;/pre&gt;&#xD;
&lt;p&gt;输出：7。是从位置5开始搜索，也就看不到位置4的那个&amp;ldquo;o&amp;rdquo;了。&lt;/p&gt;&#xD;
&lt;p&gt;函数strrpos()也几乎一样，但返回的是子字符串在整个字符串中最后一次出现的位置。&lt;/p&gt;&#xD;
&lt;pre &gt;$str1 = "hello word";&#xD;
echo strrpos($str1,'o');&lt;/pre&gt;&#xD;
&lt;p&gt;输出：7。说明&amp;ldquo;o&amp;rdquo;在hello word中最后一个位置的7。&lt;/p&gt;&#xD;
&lt;p&gt;这里需要注意一下，PHP中的false等于0，如果strpos()或者strrpos()都返回false（没有找到）或者在第一个字符就找到了（第一个字符的起始位置是0），&lt;/p&gt;&#xD;
&lt;p&gt;那么就区分不出来是找到，还是未找到了。那怎么办呢？只能用&amp;ldquo;===&amp;rdquo;恒等式来避免这个问题了。&lt;/p&gt;&#xD;
&lt;pre &gt;$str1 = "hello word";&#xD;
$position = strrpos($str1,'h'); //第一个字符就找到了，$position ==0&#xD;
if($position === false){&#xD;
	echo '没有找到';&#xD;
}else{&#xD;
	echo $position;&#xD;
}&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3，替换子字符串：str_replace()，substr_replace()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;str_replace()函数的原型如下：&lt;/p&gt;&#xD;
&lt;pre &gt;mixed str_replace(mixed needle,mixed new_needle,mixed haystack[,int &amp;amp;count]);&lt;/pre&gt;&#xD;
&lt;p&gt;第三个参数是可选的。它包含了要执行的替换操作次数。&lt;/p&gt;&#xD;
&lt;p&gt;返回替换过的字符串。&lt;/p&gt;&#xD;
&lt;pre &gt;$str1 = "hello word";&#xD;
echo str_replace('word','china',$str1);&lt;/pre&gt;&#xD;
&lt;p&gt;输出：hello china&lt;/p&gt;&#xD;
&lt;p&gt;函数substr_replace()则用来在给定位置中查找和替换字符串中特定的子字符串。原型如下：&lt;/p&gt;&#xD;
&lt;pre &gt;string substr_replace(string string,string replacement,int start[,int length]);&lt;/pre&gt;&#xD;
&lt;p&gt;这个函数使用字符串replacement替换整个字符串string中的一部分。具体是那一部分则取决于起始位置和可选参数length的值。&lt;/p&gt;&#xD;
&lt;p&gt;需要注意的是，start的值如果是0或者一个正值，就是从字符串开始计算偏移量；如果是一个负值，就从字符串末尾开始的一个偏移量。&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;strong&gt;使用正则表达式&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1，查找子字符串：ereg()，eregi()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;ereg()函数的原型如下：&lt;/p&gt;&#xD;
&lt;pre &gt;int ereg(string pattern,string search,array [matches]);&lt;/pre&gt;&#xD;
&lt;p&gt;在search字符串中查找正则为pattern的表达式，如果发现了与pattern的字表达式相匹配的字符串，这些字符串将会存储在数组matches中，每个数组元素对应一个子表达式。&lt;/p&gt;&#xD;
&lt;p&gt;函数eregi()函数除了不区分大小写外，其功能与ereg()一样。&lt;/p&gt;&#xD;
&lt;pre &gt;$str1 = "xxx@gmail.com.cn";&#xD;
if(!eregi('[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}',$str1)){&#xD;
	echo '不是正确的Email';&#xD;
}else{&#xD;
	echo '正确';&#xD;
}&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2，替换子字符串：ereg_replace()，eregi_replace()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;于str_replace()函数一样，只不过这两个使用正则表达式当做参数。&lt;/p&gt;&#xD;
&lt;p&gt;ereg_replace()的原型如下：&lt;/p&gt;&#xD;
&lt;pre &gt;string ereg_replace(string pattern,string replacement,string search);&lt;/pre&gt;&#xD;
&lt;pre &gt;$str1 = "123123@gmail.com.cn";&#xD;
echo ereg_replace('[A-Z0-9._%+-]+@','**@',$str1);&lt;/pre&gt;&#xD;
&lt;p&gt;输出：&lt;a href="mailto:**@gmail.com.cn"&gt;**@gmail.com.cn&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;函数eregi_replace除了不区分大小写外，其他与ereg_replace()相同。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3，分隔字符串：split()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;函数split()的原型如下：&lt;/p&gt;&#xD;
&lt;pre &gt;array split(string pattern,string search[,int max]);&lt;/pre&gt;&#xD;
&lt;p&gt;第三个参数为可选，表示进入数组中的元素个数。&lt;/p&gt;&#xD;
&lt;p&gt;返回值是数组。&lt;/p&gt;&#xD;
&lt;pre &gt;$str1 = "123123@gmail.com.cn";&#xD;
$arr = split('\.|@',$str1);&#xD;
while(list($key,$value) = each($arr)){&#xD;
	echo '&amp;lt;br /&amp;gt;'.$key.'--'.$value;&#xD;
}&lt;/pre&gt;&#xD;
&lt;p&gt;输出：&lt;/p&gt;&#xD;
&lt;p&gt;0--123123&#xD;
    &lt;br /&gt;1--gmail&#xD;
&#xD;
    &lt;br /&gt;2--com&#xD;
&#xD;
    &lt;br /&gt;3--cn&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;split()函数和explode()函数有点相似，前者是用正则表达式当做分隔符，后者是用字符串当做分隔符。&lt;/blockquote&gt;&#xD;
&lt;p&gt;参考：PHP与MySQL.WEB开发&lt;/p&gt;&lt;img src="http://www.cnblogs.com/xbf321/aggbug/2169072.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/xbf321/archive/2011/09/07/string-in-php.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/xbf321/archive/2011/09/06/array-in-php.html</id><title type="text">PHP学习:数组</title><summary type="text">主要内容：    数字索引数组；    非数字索引数组；    数组操作符；    二维数组和多维数组；    数组排序；    多维数组排序；    对数组进行重排序；    执行其他数组操作；</summary><published>2011-09-06T08:03:00Z</published><updated>2011-09-06T08:03:00Z</updated><author><name>兴百放</name><uri>http://www.cnblogs.com/xbf321/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xbf321/archive/2011/09/06/array-in-php.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xbf321/archive/2011/09/06/array-in-php.html"/><content type="html">&lt;p&gt;主要内容：&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;数字索引数组；&lt;/li&gt;&#xD;
&lt;li&gt;非数字索引数组；&lt;/li&gt;&#xD;
&lt;li&gt;数组操作符；&lt;/li&gt;&#xD;
&lt;li&gt;二维数组和多维数组；&lt;/li&gt;&#xD;
&lt;li&gt;数组排序；&lt;/li&gt;&#xD;
&lt;li&gt;多维数组排序；&lt;/li&gt;&#xD;
&lt;li&gt;对数组进行重排序；&lt;/li&gt;&#xD;
&lt;li&gt;执行其他数组操作；&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;&lt;strong&gt;数字索引数组&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;如同C#中的数组类似，访问数组中的每一项，可以使用数组的索引值，默认从0开始。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;新建数组：&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;新建一个数组：&lt;/p&gt;&#xD;
&lt;pre &gt;$phones = array('htc','moto','nokia');&lt;/pre&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;或：&#xD;
&lt;pre &gt;$phones[0] = 'htc'; &#xD;
$phones[1] = 'moto'; &#xD;
$phones[2] = 'nokia';&lt;/pre&gt;&#xD;
对于第二中方式创建数组，如果$phones并不存在，$phones[0] = &amp;lsquo;htc&amp;rsquo;则创建一个只有一个元素的数组，而后续的操作，将在这个数组中添加新值。数组的大小会动态变化&#xD;
&lt;p&gt;访问其中的第一个，和第二个元素：&lt;/p&gt;&#xD;
&lt;pre &gt;echo $phones[0].'--'.$phones[1];&lt;/pre&gt;&#xD;
&lt;p&gt;如果需要将按照升序排列的数字保存在数组中，可以使用range()函数，如下：创建一个从1到10的数组&lt;/p&gt;&#xD;
&lt;pre &gt;$number = range(1,10);&lt;/pre&gt;&#xD;
&lt;p&gt;此函数还有一个可选的第三个参数，这个参数允许设定值之间的步幅，如，创建一个从1到10的奇数，&lt;/p&gt;&#xD;
&lt;pre &gt;$number = range(1,10,2);&lt;/pre&gt;&#xD;
&lt;p&gt;range()函数也可以对字符进行操作，如，需要一个从a到z的字符列表，就可以以以下操作&lt;/p&gt;&#xD;
&lt;pre &gt;$number = range('a','z');&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;访问数组：&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #c0504d;" color="#c0504d"&gt;1.for循环&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;pre &gt;$phones = array('htc','moto','nokia');&#xD;
for($i=0;$i&amp;lt;3;$i++){&#xD;
	echo "$phones[$i]&amp;lt;br /&amp;gt;";&#xD;
}&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;span style="color: #c0504d;" color="#c0504d"&gt;2.foreach（专门为数组而设计）&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;pre &gt;$phones = array('htc','moto','nokia');&#xD;
foreach($phones as $v){&#xD;
	echo "$v&amp;lt;br /&amp;gt;";&#xD;
}&lt;/pre&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;strong&gt;非数字索引数组（相关数组）&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;在$phones数组中，允许PHP指定一个默认的索引。也就意味着所添加的第一个元素的索引为0，第二个为1等等。PHP还支持相关数组（非数字索引数组），以下统称为相关数组，可以将每个变量的值与 任何关键字或索引关联起来。类似于C#中Dictionary&amp;lt;TKey,TValue&amp;gt;。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;创建数组：&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;pre &gt;$phones = array('htcG6' =&amp;gt; 2400,'motoI9' =&amp;gt; 2500,'nokiaN8' =&amp;gt; 2890);&lt;/pre&gt;&#xD;
&lt;p&gt;已上单引号中的是关键字，=&amp;gt;后边的是值。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;访问数组：&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;因为相关数组中的索引不是数字，所以就不能用for语句进行操作了，但是可以使用foreach循环或list()和each()结构。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #d16349;" color="#d16349"&gt;1.foreach访问&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;pre &gt;foreach($phones as $key =&amp;gt; $value){&#xD;
	echo "$key:$value&amp;lt;br /&amp;gt;";&#xD;
}&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;span style="color: #c0504d;" color="#c0504d"&gt;2.each访问&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;pre &gt;while($element = each($phones)){ &#xD;
        echo $element['key']; //$element[0] &#xD;
        echo ':'; &#xD;
        echo $element['value']; //$element[1] &#xD;
        echo '&amp;lt;br /&amp;gt;'; &#xD;
  }&lt;/pre&gt;&#xD;
&lt;p&gt;each()函数，将返回数组当前元素，并将下一个元素作为当前元素，在while循环中，将按顺序输出。$element也是一个数组。当条用each()时，用位置key或0包含当前元素的关键字，而位置value或1包含当前元素的值。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #c0504d;" color="#c0504d"&gt;3.list访问&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;pre &gt;while(list($name,$price) = each($phones)){ &#xD;
        echo $name; &#xD;
        echo ':'; &#xD;
        echo $price; &#xD;
        echo '&amp;lt;br /&amp;gt;'; &#xD;
    }&lt;/pre&gt;&#xD;
&lt;p&gt;list()函数和方法2中$element变量的使用方法类似，但是list能够重新指定自定义变量，指向数组用一组元素的关键字和值。这个比方法2更方便，明了。\&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;strong&gt;数组操作符&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;数组间的操作：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xbf321/201109/201109051737559707.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="php-array-operate" alt="php-array-operate" src="http://images.cnblogs.com/cnblogs_com/xbf321/201109/201109051737559740.png" border="0" height="206" width="739" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;strong&gt;二维数组和多维数组&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;二维数组，以及多维数组和一维数组的建立和循环类似，只是在一维的基础上，在加数组。&lt;/p&gt;&#xD;
&lt;pre &gt;$phones = array(array('xiaomi','小米手机',1900),&#xD;
		array('htc','G6',2400),&#xD;
	        array('nokia','n8',3200));&lt;/pre&gt;&#xD;
&lt;p&gt;此数组中包含三个数组，每一组，有产品，产品描述，产品价格组成。&lt;/p&gt;&#xD;
&lt;p&gt;访问这个数组可以使用下面的方法。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;方法一，直接使用数字索引&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;pre &gt;echo '|'.$phones[0][0].'|'.$phones[0][1].'|'.$phones[0][2].'&amp;lt;br /&amp;gt;';&#xD;
echo '|'.$phones[1][0].'|'.$phones[1][1].'|'.$phones[1][2].'&amp;lt;br /&amp;gt;';&#xD;
echo '|'.$phones[2][0].'|'.$phones[2][1].'|'.$phones[2][2].'&amp;lt;br /&amp;gt;';&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;方法二，使用双重for循环&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;pre &gt;for($row=0;$row&amp;lt;3;$row++){&#xD;
	for($col=0;$col&amp;lt;3;$col++){&#xD;
		echo '|'.$phones[$row][$col];&#xD;
	}&#xD;
	echo '&amp;lt;br /&amp;gt;';&#xD;
}&lt;/pre&gt;&#xD;
&lt;p&gt;和方法一输出的结果一样。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;有时我们可能使用相关数组保存这些数据，看起来比较直观，如：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;pre &gt;$phones = array(array('name'=&amp;gt;'xiaomi','desc'=&amp;gt;'小米手机','price'=&amp;gt;1900),&#xD;
		  array('name'=&amp;gt;'htc','desc'=&amp;gt;'g6','price'=&amp;gt;2400),&#xD;
		  array('name'=&amp;gt;'nokia','desc'=&amp;gt;'n8','price'=&amp;gt;3200));&lt;/pre&gt;&#xD;
&lt;p&gt;要遍历已上的数据，可以使用如下方法。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;方法一&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;pre &gt;for($row=0;$row&amp;lt;3;$row++){&#xD;
	echo '|'.$phones[$row]['name'].'|'.$phones[$row]['desc'].'|'.$phones[$row]['price'].'&amp;lt;br /&amp;gt;';&#xD;
}&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;方法二&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;使用for遍历最外层的数据，然后使用遍历一维相关数组的方法。&lt;/p&gt;&#xD;
&lt;pre &gt;for($row=0;$row&amp;lt;3;$row++){&#xD;
	while(list($key,$value) = each($phones[$row])){&#xD;
		echo "|$value";&#xD;
	}&#xD;
	echo '&amp;lt;br /&amp;gt;';&#xD;
}&lt;/pre&gt;&#xD;
&lt;p&gt;方法一和方法二的结果一样。&lt;/p&gt;&#xD;
&lt;pre &gt;&lt;/pre&gt;&#xD;
&lt;p&gt;三维数组或三维数组已上，和二维数组的方法类似，也就是在二维数组上在嵌套数组。遍历也是在二维遍历的基础上，在嵌套一层。在这里就在多说了。&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;strong&gt;数组排序&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;以下排序只针对一维数组排序&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1，sort()函数&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如下代码，将按字符顺序排序&lt;/p&gt;&#xD;
&lt;pre &gt;$products = array('htc','nokia','moto');&#xD;
     foreach($products as $value){&#xD;
		echo "$value&amp;lt;br /&amp;gt;";&#xD;
     }&#xD;
     sort($products);&#xD;
     echo '------------&amp;lt;br /&amp;gt;';&#xD;
     foreach($products as $value){&#xD;
	echo "$value&amp;lt;br /&amp;gt;";&#xD;
     }&lt;/pre&gt;&#xD;
&lt;p&gt;也可以按数字的升序进行排序&lt;/p&gt;&#xD;
&lt;pre &gt;$products = array(2,100,5);&#xD;
     foreach($products as $value){&#xD;
	echo "$value&amp;lt;br /&amp;gt;";&#xD;
     }&#xD;
     sort($products);&#xD;
     echo '------------&amp;lt;br /&amp;gt;';&#xD;
     foreach($products as $value){&#xD;
	echo "$value&amp;lt;br /&amp;gt;";&#xD;
     }&lt;/pre&gt;&#xD;
&lt;p&gt;输出2,5,100&lt;/p&gt;&#xD;
&lt;p&gt;该函数的第二个参数是可选的。可以传递SORT_GEGULAR(默认值),SORT_NUMERIC或SORT_STRINT。指定排序类型的功能是非常有用的，例如，当&lt;/p&gt;&#xD;
&lt;p&gt;比较可能包含有数字2和12的字符串时，从数字的角度看2小于12，但从字符的角度看，&amp;lsquo;12&amp;rsquo;确小于&amp;lsquo;2&amp;rsquo;&lt;/p&gt;&#xD;
&lt;p&gt;注意：sort()函数时区分大小写的。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2，asort()函数和ksort()函数&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如果对相关数组中的Key或Value在排序时一致，就需要使用这两个函数了。&lt;/p&gt;&#xD;
&lt;p&gt;ksort函数：针对相关数组中的Key进行升序排序&lt;/p&gt;&#xD;
&lt;pre &gt;$phones = array('htcG6' =&amp;gt; 2400,'nokiaN8' =&amp;gt; 2890,'motoI9' =&amp;gt; 3200);&#xD;
     ksort($phones);&lt;/pre&gt;&#xD;
&lt;p&gt;输出：htcG6,motoI9,nokiaN8&lt;/p&gt;&#xD;
&lt;p&gt;asort函数：针对相关数组中的Value进行升序排序&lt;/p&gt;&#xD;
&lt;pre &gt;$phones = array('htcG6' =&amp;gt; 2400,'nokiaN8' =&amp;gt; 2890,'motoI9' =&amp;gt; 3200);&#xD;
     asort($phones);&lt;/pre&gt;&#xD;
&lt;p&gt;输出：2400,2890,3200&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3，反向排序&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;上面说的都是按照升序进行排序，如果需要降序，则要使用每一个函数所对应的降序函数。&lt;/p&gt;&#xD;
&lt;p&gt;sort() ==&amp;gt;rsort()&lt;/p&gt;&#xD;
&lt;p&gt;ksort() ==&amp;gt;krsort()&lt;/p&gt;&#xD;
&lt;p&gt;asort() ==&amp;gt;arsort()&lt;/p&gt;&#xD;
&lt;p&gt;使用方法都是一样的。&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;strong&gt;多维数组排序&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;多维数组中，数组包含数组，排序要按照某一条件进行排序，所以要比一维数组排序要复杂的多。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1，用户自定排序&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;pre &gt;$phones = array(array('name'=&amp;gt;'xiaomi','desc'=&amp;gt;'小米手机','price'=&amp;gt;1900),&#xD;
							array('name'=&amp;gt;'htc','desc'=&amp;gt;'g6','price'=&amp;gt;1400),&#xD;
							array('name'=&amp;gt;'nokia','desc'=&amp;gt;'n8','price'=&amp;gt;3200));&lt;/pre&gt;&#xD;
&lt;p&gt;如果对以上的二维相关数据进行排序，就比较麻烦了。因为包含三种条件，不同的条件，排序算法可能都不一样，所以需要用户自定编写排序算法。&lt;/p&gt;&#xD;
&lt;p&gt;usort()函数，提供二个参数，第一个参数，是需要排序的对象，第二个参数是自定义函数。如下：&lt;/p&gt;&#xD;
&lt;pre &gt;$phones = array(array('name'=&amp;gt;'xiaomi','desc'=&amp;gt;'小米手机','price'=&amp;gt;1900),&#xD;
							array('name'=&amp;gt;'htc','desc'=&amp;gt;'g6','price'=&amp;gt;1400),&#xD;
							array('name'=&amp;gt;'nokia','desc'=&amp;gt;'n8','price'=&amp;gt;3200));&#xD;
function compare($x,$y){&lt;/pre&gt;&#xD;
&#xD;
&lt;span style="color: #ff0000;" color="#ff0000"&gt;&lt;/span&gt;&#xD;
&lt;pre &gt;if($x['price'] == $y['price']){&#xD;
		return 0;&#xD;
	}else	if($x['price'] &amp;lt; $y['price']){&lt;/pre&gt;&#xD;
&#xD;
&lt;span style="color: #ff0000;" color="#ff0000"&gt;&lt;/span&gt;&#xD;
&lt;pre &gt;return -1;&#xD;
	}else{&#xD;
		return 1;&#xD;
	}&#xD;
}&#xD;
&lt;/pre&gt;&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
&lt;span style="color: #ff0000;" color="#ff0000"&gt;usort($phones,'compare');&lt;/span&gt;&#xD;
&lt;pre &gt;for($row=0;$row&amp;lt;3;$row++){&#xD;
	while(list($key,$value) = each($phones[$row])){&#xD;
		echo "|$value";&#xD;
	}&#xD;
	echo '&amp;lt;br /&amp;gt;';&#xD;
}&lt;/pre&gt;&#xD;
&lt;p&gt;上面的compare()函数接受两个需比较的数组。最后按照价格升序输出。&lt;/p&gt;&#xD;
&lt;p&gt;如果需要对name进行排序的话，只需把compare()函数中的price替换成name即可。&lt;/p&gt;&#xD;
&lt;p&gt;usort()中的&amp;rdquo;u&amp;rdquo;代表&amp;rdquo;user&amp;rdquo;，因为这个函数要求传入用户自定义函数。asort和ksort对应的版本uasort和uksort也要求传入用户自定义函数。&lt;/p&gt;&#xD;
&lt;p&gt;类似于asort和ksort，当对相关数组进行排序时，uasort和uksort才会被使用。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2，反向用户排序&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;函数sort(),asort()，ksort()都分别对应一个带字母&amp;ldquo;r&amp;rdquo;的反向排序函数。用户定义的排序没有反向体。但只要把用户自定义函数的返回值取反即可。如：&lt;/p&gt;&#xD;
&lt;pre &gt;function compare($x,$y){&#xD;
	if($x['price'] == $y['price']){&#xD;
		return 0;&#xD;
	}else	if($x['price'] &amp;gt; $y['price']&lt;/pre&gt;&#xD;
&#xD;
&lt;span style="color: #ff0000;" color="#ff0000"&gt;&lt;/span&gt;&#xD;
&lt;pre &gt;){&#xD;
		return -1;&#xD;
	}else{&#xD;
			return 1;&#xD;
	}&#xD;
}&lt;/pre&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;strong&gt;对数组进行重新排序&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1，使用shuffle()函数&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我们可能在需要在10个广告中随机显示3个广告，那么这个函数就派上用场了。如下：&lt;/p&gt;&#xD;
&lt;pre &gt;$myChars = range('a','z');&#xD;
  shuffle($myChars);&#xD;
  for($i=0;$i&amp;lt;3;$i++){&#xD;
	echo $myChars[$i].'&amp;lt;br /&amp;gt;';&#xD;
  }&lt;/pre&gt;&#xD;
&lt;p&gt;上面代码从a-z26个字符中，随机的挑选3个。&lt;/p&gt;&#xD;
&lt;p&gt;也可以使用array_rand()函数，只不过此函数返回一个数组。如下：&lt;/p&gt;&#xD;
&lt;pre &gt;$myChars = range(1,10);&#xD;
$rChars = array_rand($myChars,2); //第一参数为数组对象，第二个参数可选，默认1。返回多少个随机的元素。&#xD;
echo $rChars[0].'-'.$rChars[1];&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2，使用array_reverse()函数&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;如果对于一个数组，我们想把它翻转，那么这个函数就有用武之地了。比如：1,2,3,4，我们想输出4,3,2,1，虽然for循环可以，但是需要些三行代码。&lt;/p&gt;&#xD;
&lt;p&gt;array_reverse()函数使用如下：&lt;/p&gt;&#xD;
&lt;pre &gt;$numbers = range(1,10);&#xD;
  $numbers = array_reverse($numbers);&#xD;
  foreach($numbers as $value){&#xD;
	echo $value.'&amp;lt;br /&amp;gt;';&#xD;
  }&lt;/pre&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;strong&gt;执行其他的数组操作&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1，在数组中浏览：each()，current()，reset()，end()，next()，pos()和prev()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;each()&lt;span style="background-color: #ffff00;"&gt;间接&lt;/span&gt;的使用了数组的指针，其他的函数都是&lt;span style="background-color: #ffff00;"&gt;直接&lt;/span&gt;使用操作这个指针。&lt;/p&gt;&#xD;
&lt;p&gt;如果创建一个新数组，那么当前指针就被初始化，并指向第一个元素，调用current($array_name)将返回第一个元素。&lt;/p&gt;&#xD;
&lt;p&gt;调用each()和next()都会使指针前移。调用each($array_name)会在指针前移一个位置&lt;span style="background-color: #ffff00;"&gt;之前&lt;/span&gt;返回当前元素。next()函数则不用，它会将指针前移，然后再返回&lt;span style="background-color: #ffff00;"&gt;新的当前元素&lt;/span&gt;。&lt;/p&gt;&#xD;
&lt;p&gt;reset()函数将返回指向数组的第一个元素的指针（&lt;span style="background-color: #ffff00;"&gt;有时指针会移到数组中的某一个位置，我们想重置这个数组，就会使用这个函数&lt;/span&gt;）。调用end($array_name)可以将指针移到数据的末尾。reset()和end()将返回数组的第一个元素和最后一个元素。&lt;/p&gt;&#xD;
&lt;p&gt;prev()函数正好和next()相反。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2，对数组的每一个元素应用任何函数：array_walk()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;有时，会以相同的方式使用或者修改数组的每一个元素。那么array_walk就提供这样的操作。&lt;/p&gt;&#xD;
&lt;p&gt;array_walk()函数的原型如下：&lt;/p&gt;&#xD;
&lt;pre &gt;bool array_walk(array arr,string func,[mixed userdata]);&lt;/pre&gt;&#xD;
&lt;p&gt;第一个参数是arr，也就是需要处理的数组。&lt;/p&gt;&#xD;
&lt;p&gt;第二个参数是用户自定义函数，怎么处理这个数组中的每一个元素，就需要用户写自定义操作。&lt;/p&gt;&#xD;
&lt;p&gt;第三个参数是可选的，如果使用它，它可以作为一个参数传递给我们的自定义函数。&lt;/p&gt;&#xD;
&lt;pre &gt;$numbers = range(1,10);&#xD;
  function show_even_number($value){&#xD;
	if($value % 2 ==0){&#xD;
		echo $value.'&amp;lt;br /&amp;gt;';&#xD;
	}&#xD;
  }&#xD;
  array_walk($numbers,'show_even_number');&lt;/pre&gt;&#xD;
&lt;p&gt;上面的代码，只显示偶数。&lt;/p&gt;&#xD;
&lt;p&gt;我们也可以对这个数组中的每一个元素进行修改等等之类的操作。如下：&lt;/p&gt;&#xD;
&lt;pre &gt;$numbers = range(1,10);&#xD;
  function replace_number(&amp;amp;$value,$key,$userdata){&#xD;
	$value = $value * $userdata;&#xD;
  }&#xD;
  array_walk($numbers,'replace_number',2);&#xD;
  foreach($numbers as $value){&#xD;
	echo $value .'&amp;lt;br /&amp;gt;';&#xD;
  }&lt;/pre&gt;&#xD;
&lt;p&gt;上面的代码就使用了array_walk()函数的第三个参数，乘法因子，可以不用在自定义函数的固定，可以根据业务逻辑随时更换。需要注意是我们在$value变量之前加了一个&amp;amp;符号，表明传的是变量的引用，于C#中的ref或out类似。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3，统计数组元素个数：count(),sizeof()和array_count_values()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;count()和sizeof()函数都可以计算数组元素中的元素个数，如果数组为空数组或没有经过初始化的变量，都返回0；&lt;/p&gt;&#xD;
&lt;pre &gt;$numbers = range(1,10);&#xD;
echo count($numbers); //sizeof($numbers)&lt;/pre&gt;&#xD;
&lt;p&gt;array_count_values()函数，返回数组中每一个元素，出现的频率数的一个相关数组。如下：&lt;/p&gt;&#xD;
&lt;pre &gt;$numbers = array(5,1,8,5,3,0,4,3,5);&#xD;
  $ac = array_count_values($numbers);&#xD;
  while(list($key,$value) = each($ac)){&#xD;
	echo $key.'--'.$value.'&amp;lt;br /&amp;gt;';&#xD;
  }&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Courier New;" face="Courier New"&gt;输出如下：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;pre &gt;5--3&#xD;
1--1&#xD;
8--1&#xD;
3--2&#xD;
0--1&#xD;
4--1&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;4，将数组转换成标量变量：extract()&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;extract()函数的作用是将一个数组转换成一系列的标量变量，这些变量的名称必须是数组中的Key，而变量值则是数组中的值。如下：&lt;/p&gt;&#xD;
&lt;pre &gt;$phones = array('name' =&amp;gt; 'xiaomi','price'=&amp;gt;1999,'os' =&amp;gt; 'android');&#xD;
extract($phones);&#xD;
echo "$name =&amp;gt; $price =&amp;gt; $os";&lt;/pre&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;参考：PHP与MySQL.WEB开发&lt;/p&gt;&lt;img src="http://www.cnblogs.com/xbf321/aggbug/2167707.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/xbf321/archive/2011/09/06/array-in-php.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/xbf321/archive/2011/09/01/file-in-php.html</id><title type="text">PHP学习:文件操作</title><summary type="text">主要内容：    打开文件    写/读文件    关闭文件    删除文件    确定文件的大小</summary><published>2011-09-01T07:28:00Z</published><updated>2011-09-01T07:28:00Z</updated><author><name>兴百放</name><uri>http://www.cnblogs.com/xbf321/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xbf321/archive/2011/09/01/file-in-php.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xbf321/archive/2011/09/01/file-in-php.html"/><content type="html">&lt;p&gt;&lt;span style="font-family: 宋体;"&gt;将数据写或读入文件，基本上分为三个步骤：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span&gt;1.&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;打开一个文件（如果存在）&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span&gt;2.&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;写&lt;/span&gt;/&lt;span style="font-family: 宋体;"&gt;读文件&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span&gt;3.&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;关闭这个文件&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span style="font-family: Wingdings; font-size: 18pt;"&gt;l&lt;/span&gt;&lt;span style="font-family: Verdana; font-size: 18pt;"&gt;&lt;strong&gt;打开文件&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;在打开文件文件之前，我们需要知道这个文件的路径，以及此文件是否存在。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;用&lt;/span&gt;&lt;span style="color: red;"&gt;$_SERVER[&amp;ldquo;DOCUMENT_ROOT&amp;rdquo;]&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;内置全局变量，来获得站点的相对路径。如下：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;/p&gt;&#xD;
&lt;div style="margin-left: 20px;" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #800080;"&gt;$root&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;$_SERVER&lt;/span&gt;&lt;span style="color: #000000;"&gt;[&amp;ldquo;DOCUMENT_ROOT&amp;rdquo;];&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;在用函数&lt;/span&gt;&lt;span style="color: red;"&gt;file_exists()&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;来检测文件是否存在。如下：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;/p&gt;&#xD;
&lt;div style="margin-left: 20px;" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #0000ff;"&gt;If&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;!&lt;/span&gt;&lt;span style="color: #008080;"&gt;file_exists&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #800080;"&gt;$root&lt;/span&gt;&lt;span style="color: #000000;"&gt;/order.txt&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)){&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;echo&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;lsquo;文件不存在&amp;rsquo;;}&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;接下来用&lt;/span&gt;&lt;span style="color: red;"&gt;fopen()&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;函数打开这个文件。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;/p&gt;&#xD;
&lt;div style="margin-left: 20px;" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #800080;"&gt;$fp&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;fopen&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #800080;"&gt;$root&lt;/span&gt;&lt;span style="color: #000000;"&gt;/order.txt&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;ab&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span style="color: red;"&gt;fopen()&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;函数，接受&lt;/span&gt;2&lt;span style="font-family: 宋体;"&gt;个或&lt;/span&gt;3&lt;span style="font-family: 宋体;"&gt;个或&lt;/span&gt;4&lt;span style="font-family: 宋体;"&gt;个参数。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;第一个参数为文件路径，第二个为操作方式（读&lt;/span&gt;/&lt;span style="font-family: 宋体;"&gt;写&lt;/span&gt;/&lt;span style="font-family: 宋体;"&gt;追加等等），必选参数。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;/p&gt;&#xD;
&lt;div style="margin-left: 20px;" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #800080;"&gt;$fp&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;fopen&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #800080;"&gt;$root&lt;/span&gt;&lt;span style="color: #000000;"&gt;/order.txt&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;ab&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;第三个为可选参数，如果需要&lt;/span&gt;PHP&lt;span style="font-family: 宋体;"&gt;在&lt;/span&gt;include_path&lt;span style="font-family: 宋体;"&gt;中搜索一个文件，就可以使用它，不需要提供目录名或路径。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;/p&gt;&#xD;
&lt;div style="margin-left: 20px;" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #800080;"&gt;$fp&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;fopen&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;order.txt&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;ab&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;第四个也为可选参数，允许文件名称以协议名称开始（如&lt;/span&gt;http://&lt;span style="font-family: 宋体;"&gt;）并且在一个远程的位置打开这个文件，也支持一些其他的协议，比如&lt;/span&gt;ftp&lt;span style="font-family: 宋体;"&gt;等等。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;如果&lt;/span&gt;fopen()&lt;span style="font-family: 宋体;"&gt;成功的打开一个文件，就返回一个指向此文件的指针。在上面我们保存到了&lt;/span&gt;$fp&lt;span style="font-family: 宋体;"&gt;变量中。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;strong&gt;附文件模式图&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;&lt;img style="width: 732px; height: 445px;" alt="" src="http://images.cnblogs.com/cnblogs_com/xbf321/php-file-type.PNG" border="0" height="445" width="732" /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt;"&gt;&lt;strong&gt;&lt;span style="font-family: Wingdings; font-size: 18pt;"&gt;l&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 18pt;"&gt;写文件&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;在&lt;/span&gt;PHP&lt;span style="font-family: 宋体;"&gt;中写文件比较简单。直接用&lt;/span&gt;&lt;span style="color: red;"&gt;fwrite()&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;函数即可。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span style="color: red;"&gt;fwrite()&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的原型如下&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;/p&gt;&#xD;
&lt;div style="margin-left: 20px;" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #000000;"&gt;int&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;fwrite&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;resource&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;handle&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;[&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt;int&amp;nbsp;length]);&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;第三个参数是可选的，表明写入文件的最大长度。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;可以通过内置&lt;/span&gt;&lt;span style="color: red;"&gt;strlen()&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;函数获得字符串的长度，如下：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;/p&gt;&#xD;
&lt;div style="margin-left: 20px;" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #008080;"&gt;fwrite&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$fp&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800080;"&gt;$outputinfo&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008080;"&gt;strlen&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$outputinfo&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;此函数告诉&lt;/span&gt;PHP&lt;span style="font-family: 宋体;"&gt;将&lt;/span&gt;$outputinfo&lt;span style="font-family: 宋体;"&gt;中的信息保存到&lt;/span&gt;$fp&lt;span style="font-family: 宋体;"&gt;指向的文件中。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt;"&gt;&lt;strong&gt;&lt;span style="font-family: Wingdings; font-size: 18pt;"&gt;l&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 18pt;"&gt;读文件&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin: 0cm 0cm 0pt 42pt;"&gt;&lt;strong&gt;&lt;span&gt;1.&lt;span style="font: 7pt 'Times New Roman';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;以只读模式打开文件&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 42pt;"&gt;&lt;span style="font-family: 宋体;"&gt;仍然使用&lt;/span&gt;&lt;span style="color: red;"&gt;fopen()&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;函数，但只读模式打开文件，就用&amp;ldquo;&lt;/span&gt;rb&lt;span style="font-family: 宋体;"&gt;&amp;rdquo;文件模式。如下：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin: 0cm 0cm 0pt 42pt;"&gt;&lt;/p&gt;&#xD;
&lt;div style="margin-left: 60px;" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #800080;"&gt;$fp&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;fopen&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&amp;ldquo;&lt;/span&gt;&lt;span style="color: #800080;"&gt;$root&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;order&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;txt&amp;rdquo;&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;rsquo;rb&amp;rsquo;);&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p style="text-indent: -21pt; margin: 0cm 0cm 0pt 42pt;"&gt;&lt;strong&gt;2.&lt;span style="font: 7pt 'Times New Roman';"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-family: 宋体;"&gt;&lt;strong&gt;知道何时读完文件&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 42pt;"&gt;&lt;span style="font-family: 宋体;"&gt;我们用&lt;/span&gt;while&lt;span style="font-family: 宋体;"&gt;循环来读取文件内容，用&lt;/span&gt;&lt;span style="color: red;"&gt;feof()&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;函数，作为循环条件的终止条件。如下：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin: 0cm 0cm 0pt 42pt;"&gt;&lt;/p&gt;&#xD;
&lt;div style="margin-left: 60px;" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #0000ff;"&gt;while&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;!&lt;/span&gt;&lt;span style="color: #008080;"&gt;feof&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$fp&lt;/span&gt;&lt;span style="color: #000000;"&gt;)){&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;要处理的信息&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p style="text-indent: -21pt; margin: 0cm 0cm 0pt 42pt;"&gt;&lt;strong&gt;3.&lt;/strong&gt;&lt;span style="font-family: 宋体;"&gt;&lt;strong&gt;每次读取一行记录&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 42pt;"&gt;&lt;span style="color: red;"&gt;fgets()&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;函数可以从文本文件中读取一行内容。如下：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 42pt;"&gt;&lt;/p&gt;&#xD;
&lt;div style="margin-left: 60px;" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #800080;"&gt;$fp&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;fopen&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #800080;"&gt;$root&lt;/span&gt;&lt;span style="color: #000000;"&gt;/order.txt&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;rb&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;while&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;!&lt;/span&gt;&lt;span style="color: #008080;"&gt;feof&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$fp&lt;/span&gt;&lt;span style="color: #000000;"&gt;)){&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;$info&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;fgets&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$fp&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt;999&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;echo&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;$info&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;br&amp;nbsp;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;fclose&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$fp&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 42pt;"&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 42pt;"&gt;&lt;span style="font-family: 宋体;"&gt;这样，他将不断的读入数据，直到读取一个换行符&lt;/span&gt;(\n)&lt;span style="font-family: 宋体;"&gt;或者文件结束符&lt;/span&gt;EOF&lt;span style="font-family: 宋体;"&gt;，或者是从文件中读取了&lt;/span&gt;998B&lt;span style="font-family: 宋体;"&gt;，可以读取的最大长度为指定的长度减去&lt;/span&gt;1B&lt;span style="font-family: 宋体;"&gt;。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin: 0cm 0cm 0pt 42pt;"&gt;&lt;strong&gt;&lt;span&gt;4.&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;读取整个文件&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 42pt;"&gt;PHP&lt;span style="font-family: 宋体;"&gt;提供了&lt;/span&gt;4&lt;span style="font-family: 宋体;"&gt;中不同的方式来读取整个文件。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt; margin: 0cm 0cm 0pt 21pt;"&gt;a).&lt;span style="color: red;"&gt;readfile()&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;函数&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt; margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;它可以不用先&lt;/span&gt;fopen($path)&lt;span style="font-family: 宋体;"&gt;文件和关闭文件，也不用&lt;/span&gt;echo&lt;span style="font-family: 宋体;"&gt;，直接使用即可。如下：&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div style="margin-left: 100px;" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;readfile&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&amp;ldquo;&lt;/span&gt;&lt;span style="color: #800080;"&gt;$root&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;order&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;txt&amp;rdquo;);&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p style="text-indent: 21pt; margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;它会自动把文件的信息，输出到浏览器中。它的原型如下：&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div style="margin-left: 100px;" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #000000;"&gt;Int&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;readfile&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;filename&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt;[int&amp;nbsp;use_include_path[&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;resource&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;context]]);&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p style="text-indent: 21pt; margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;第二个可选参数指定了&lt;/span&gt;PHP&lt;span style="font-family: 宋体;"&gt;是否在&lt;/span&gt;include_path&lt;span style="font-family: 宋体;"&gt;中查找文件，这一点于&lt;/span&gt;fopen&lt;span style="font-family: 宋体;"&gt;函数一样，返回值为从文件中读取的字节总数。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt; margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;注：&lt;/span&gt;&lt;span style="font-family: 宋体; color: red;"&gt;直接使用，不用&lt;/span&gt;&lt;span style="color: red;"&gt;fopen&lt;/span&gt;&lt;span style="font-family: 宋体; color: red;"&gt;或&lt;/span&gt;&lt;span style="color: red;"&gt;fclose&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt; margin: 0cm 0cm 0pt 21pt;"&gt;b).&lt;span style="color: red;"&gt;fpassthru()&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;函数&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt; margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;要使用这个函数，必须先&lt;/span&gt;fopen()&lt;span style="font-family: 宋体;"&gt;打开一个文件。然后将文件的指针作为参数传递给&lt;/span&gt;fpassthru()&lt;span style="font-family: 宋体;"&gt;，这样就可以把文件指针所指向的文件内容输出。然后再将这个文件关闭。如下：&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div style="margin-left: 100px;" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #800080;"&gt;$fp&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;fopen&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&amp;ldquo;&lt;/span&gt;&lt;span style="color: #800080;"&gt;$root&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;order&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;txt&amp;rdquo;&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;rb&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;fpassthru&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$fp&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;fclose&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$fp&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p style="text-indent: 21pt; margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;返回值同样为从文件中读取的字节总数。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt; margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;注：&lt;/span&gt;&lt;span style="font-family: 宋体; color: red;"&gt;必须&lt;/span&gt;&lt;span style="color: red;"&gt;fopen&lt;/span&gt;&lt;span style="font-family: 宋体; color: red;"&gt;和&lt;/span&gt;&lt;span style="color: red;"&gt;fclose&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt; margin: 0cm 0cm 0pt 21pt;"&gt;c).&lt;span style="color: red;"&gt;file()&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;函数&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt; margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;除了将文件输出到浏览器中外，他和&lt;/span&gt;readfile()&lt;span style="font-family: 宋体;"&gt;函数是一样的，它把结果发送到一个数组中。如下：&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div style="margin-left: 100px;" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #800080;"&gt;$fileArray&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;file&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&amp;ldquo;&lt;/span&gt;&lt;span style="color: #800080;"&gt;$root&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;order&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;txt&amp;rdquo;);&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p style="text-indent: 21pt; margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;文件中的每一行，将作为数组的每一个元素。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt; margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;注：&lt;/span&gt;&lt;span style="font-family: 宋体; color: red;"&gt;直接使用，不用&lt;/span&gt;&lt;span style="color: red;"&gt;fopen&lt;/span&gt;&lt;span style="font-family: 宋体; color: red;"&gt;和&lt;/span&gt;&lt;span style="color: red;"&gt;fclose&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt; margin: 0cm 0cm 0pt 21pt;"&gt;d).&lt;span style="color: red;"&gt;file_get_contents()&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;函数&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt; margin: 0cm 0cm 0pt 42pt;"&gt;&lt;span style="font-family: 宋体;"&gt;于&lt;/span&gt;readfile()&lt;span style="font-family: 宋体;"&gt;相同，但是该函数将以字符串的形式返回文件内容，而不是将文件内容直接输出到浏览器中，也就是必须使用&lt;/span&gt;echo &lt;span style="font-family: 宋体;"&gt;输出，如下：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt; margin: 0cm 0cm 0pt 42pt;"&gt;&lt;/p&gt;&#xD;
&lt;div style="margin-left: 100px;" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #0000ff;"&gt;echo&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;file_get_contents&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&amp;ldquo;&lt;/span&gt;&lt;span style="color: #800080;"&gt;$root&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;order&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;txt&amp;rdquo;);&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p style="text-indent: 21pt; margin: 0cm 0cm 0pt 42pt;"&gt;注：&lt;span style="color: red;"&gt;直接使用，不用&lt;/span&gt;&lt;span style="color: red;"&gt;fopen&lt;/span&gt;&lt;span style="font-family: 宋体; color: red;"&gt;和&lt;/span&gt;&lt;span style="color: red;"&gt;fclose&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin: 0cm 0cm 0pt 42pt;"&gt;&lt;strong&gt;&lt;span&gt;5.&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;读取一个字符&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 42pt;"&gt;&lt;span style="color: red;"&gt;fgetc()&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;函数从一个文件中一次读取一个字符，它具有一个文件指针函数，这也是唯一的参数，而且它返回下一个字符。如下：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 42pt;"&gt;&lt;/p&gt;&#xD;
&lt;div style="margin-left: 60px;" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #800080;"&gt;$fp&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;fopen&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #800080;"&gt;$root&lt;/span&gt;&lt;span style="color: #000000;"&gt;/order.txt&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;rb&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;while&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;!&lt;/span&gt;&lt;span style="color: #008080;"&gt;feof&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$fp&lt;/span&gt;&lt;span style="color: #000000;"&gt;)){&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;$char&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;fgetc&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$fp&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;!&lt;/span&gt;&lt;span style="color: #008080;"&gt;feof&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$fp&lt;/span&gt;&lt;span style="color: #000000;"&gt;)){&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;echo&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$char&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;\n&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;?&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;br&amp;nbsp;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;$char&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;fclose&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$fp&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 42pt;"&gt;注：&lt;span style="color: red;"&gt;fgetc()&lt;/span&gt;&lt;span style="font-family: 宋体; color: red;"&gt;函数的一个缺点就是它返回文件的结束符&lt;/span&gt;&lt;span style="color: red;"&gt;EOF&lt;/span&gt;&lt;span style="font-family: 宋体; color: red;"&gt;，而&lt;/span&gt;&lt;span style="color: red;"&gt;fgets()&lt;/span&gt;&lt;span style="font-family: 宋体; color: red;"&gt;则不会。读取字符后还需要判断&lt;/span&gt;&lt;span style="color: red;"&gt;feof()&lt;/span&gt;&lt;span style="font-family: 宋体; color: red;"&gt;。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin: 0cm 0cm 0pt 42pt;"&gt;&lt;strong&gt;&lt;span&gt;6.&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;读取任意长度&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 42pt;"&gt;&lt;span style="color: red;"&gt;fread()&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;函数即为从文件中读取任一长度的字节，函数原型如下：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 42pt;"&gt;&lt;/p&gt;&#xD;
&lt;div style="margin-left: 60px;" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;fread&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;resource&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;fp&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt;int&amp;nbsp;length);&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 42pt;"&gt;使用该函数时，它或者是读满了length&lt;span style="font-family: 宋体;"&gt;参数所指定的字节数，或者是读到了文件的结束。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt;"&gt;&lt;/p&gt;&#xD;
&lt;div style="margin-left: 60px;" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #800080;"&gt;$fp&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;fopen&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #800080;"&gt;$root&lt;/span&gt;&lt;span style="color: #000000;"&gt;/order.txt&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;rb&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;echo&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;fread&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$fp&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt;10&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;读取10个字节&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;fclose&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$fp&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt;"&gt;l&lt;span style="font-family: 宋体; font-size: 18pt;"&gt;关闭文件&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;关闭文件比较简单，直接调用&lt;/span&gt;&lt;span style="color: red;"&gt;fclose()&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;函数即可，如果返回&lt;/span&gt;true&lt;span style="font-family: 宋体;"&gt;，则表明成功，反之。如下：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt;"&gt;&lt;/p&gt;&#xD;
&lt;div style="margin-left: 20px;" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #008080;"&gt;fclose&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$fp&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt;"&gt;l&lt;span style="font-family: 宋体; font-size: 18pt;"&gt;删除文件&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span style="color: red;"&gt;unlink()&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;函数&lt;/span&gt;(&lt;span style="font-family: 宋体;"&gt;没有名为&lt;/span&gt;delete&lt;span style="font-family: 宋体;"&gt;的函数&lt;/span&gt;)&lt;span style="font-family: 宋体;"&gt;，如下：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt;"&gt;&lt;/p&gt;&#xD;
&lt;div style="margin-left: 20px;" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #008080;"&gt;unlink&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #800080;"&gt;$root&lt;/span&gt;&lt;span style="color: #000000;"&gt;/order.txt&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt;"&gt;l&lt;span style="font-family: 宋体; font-size: 18pt;"&gt;确定文件大小&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt;"&gt;&lt;span style="font-family: 宋体;"&gt;可以使用&lt;/span&gt;&lt;span style="color: red;"&gt;filesize()&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;函数来查看一个文件的大小&lt;/span&gt;(&lt;span style="font-family: 宋体;"&gt;字节为单位&lt;/span&gt;)&lt;span style="font-family: 宋体;"&gt;，如下：&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;div style="margin-left: 20px;" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #0000ff;"&gt;echo&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;filesize&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #800080;"&gt;$root&lt;/span&gt;&lt;span style="color: #000000;"&gt;/order.txt&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;参考：PHP与MySQL.WEB开发&lt;/p&gt;&lt;img src="http://www.cnblogs.com/xbf321/aggbug/2162055.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/xbf321/archive/2011/09/01/file-in-php.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/xbf321/archive/2011/08/15/top-one-or-top-n-in-sql-server.html</id><title type="text">SQL Server:获得用户最新或前n条订单的几种SQL语句</title><summary type="text">场景：有一张用户表，一个订单表，要求获得一个用户对应的最新的一条订单信息。 实现以上要求，我们可以用以下几种方式，但是效率却相差很远。 首先我们在Order表中，创建一个索引： CREATEUNIQUEINDEXidx_eid_odD_oidDONOrders(EmployeeID,OrderDateDESC,OrderIDDESC) 多个OrderId是为了在OrderData相同的情况下，按订单号倒序，是个辅助属性。 方法1： SELECTEmployeeID,OrderIDFROMOrdersASO1WHEREOrderID=(SELECTTOP(1)OrderIDFROMOrders.</summary><published>2011-08-15T14:51:00Z</published><updated>2011-08-15T14:51:00Z</updated><author><name>兴百放</name><uri>http://www.cnblogs.com/xbf321/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xbf321/archive/2011/08/15/top-one-or-top-n-in-sql-server.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xbf321/archive/2011/08/15/top-one-or-top-n-in-sql-server.html"/><content type="html">&lt;p&gt;&lt;strong style="font-size: 18pt;"&gt;场景：有一张用户表，一个订单表，要求获得一个用户对应的最新的一条订单信息。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;实现以上要求，我们可以用以下几种方式，但是效率却相差很远。&lt;/p&gt;&lt;p&gt;首先我们在Order表中，创建一个索引： &lt;br /&gt;&lt;/p&gt;&lt;div style="margin-left: 25px; border-width: medium; border-style: none; -moz-border-top-colors: none; -moz-border-right-colors: none; -moz-border-bottom-colors: none; -moz-border-left-colors: none; -moz-border-image: none;" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #0000FF;"&gt;CREATE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;UNIQUE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INDEX&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;idx_eid_odD_oidD&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;ON&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders(EmployeeID,OrderDate&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;DESC&lt;/span&gt;&lt;span style="color: #000000;"&gt;,OrderID&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;DESC&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;多个OrderId是为了在OrderData相同的情况下，按订单号倒序，是个辅助属性。&lt;/p&gt;&lt;p&gt;&lt;strong style="font-size: 18pt;"&gt;方法1：　&lt;/strong&gt;　&lt;/p&gt;&#xD;
&lt;div style="margin-left: 25px; border-width: medium; border-style: none; -moz-border-top-colors: none; -moz-border-right-colors: none; -moz-border-bottom-colors: none; -moz-border-left-colors: none; -moz-border-image: none;" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;EmployeeID,OrderID&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;O1&lt;br /&gt;&#xD;
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;WHERE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;OrderID&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;TOP&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;)OrderID&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;O2&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;WHERE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;O1.EmployeeID&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;O2.EmployeeID&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;ORDER&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;BY&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;OrderDate&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;DESC&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;,OrderID&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;DESC&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&#xD;
)&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;如果想获得前n条订单信息，把 = 号改成IN，然后TOP(n)就可以了。&lt;/p&gt;&lt;p&gt;不论是取一条还是多条，即使有索引，数据多的情况下，也是最慢的。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 18pt;"&gt;方法2：&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="margin-left: 25px; border-width: medium; border-style: none; -moz-border-top-colors: none; -moz-border-right-colors: none; -moz-border-bottom-colors: none; -moz-border-left-colors: none; -moz-border-image: none;" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;O.EmployeeID,O.OrderID&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;EmployeeID,(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;TOP&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;)OrderID&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;O2&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;WHERE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;E.EmployeeID&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;O2.EmployeeID&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;ORDER&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;BY&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;OrderDate&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;DESC&lt;/span&gt;&lt;span style="color: #000000;"&gt;,OrderID&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;DESC&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;OrderID&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Employees&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;E&lt;br /&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;EO&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;INNER&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;JOIN&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;O&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;ON&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;EO.OrderID&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;O.OrderID&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;方法2只能取一条信息，不能取多条信息。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;在取一条的情况下，这个要比方法1快多了，因为用户相比订单信息要少很多。 &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong style="font-size: 18pt;"&gt;方法3：&lt;/strong&gt;&lt;br style="font-size: 18pt;" /&gt;&lt;/p&gt;&lt;div style="margin-left: 25px; border-width: medium; border-style: none; -moz-border-top-colors: none; -moz-border-right-colors: none; -moz-border-bottom-colors: none; -moz-border-left-colors: none; -moz-border-image: none;" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;E.EmployeeID,O.OrderID&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Employees&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;E&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;CROSS&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;APPLY&amp;nbsp;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;TOP&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;O1&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;WHERE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;E.EmployeeID&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;O1.EmployeeID&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;ORDER&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;BY&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;O1.OrderDate&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;DESC&lt;/span&gt;&lt;span style="color: #000000;"&gt;,O1.OrderID&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;DESC&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;O&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;这个应用到了SQL Server 2005或更高版本的一些新特性，这个效率要比方法2还好。&lt;/p&gt;&lt;p&gt;如果想取得多条，只需更改TOP(n)即可。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;APPLY详解，参见 &lt;a target="_blank" href="http://www.cnblogs.com/xbf321/archive/2011/08/14/apply-in-sql-server.html"&gt;http://www.cnblogs.com/xbf321/archive/2011/08/14/apply-in-sql-server.html&lt;/a&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong style="font-size: 18pt;"&gt;方法4：&lt;/strong&gt;&lt;/p&gt;&lt;div style="margin-left: 25px; border-width: medium; border-style: none; -moz-border-top-colors: none; -moz-border-right-colors: none; -moz-border-bottom-colors: none; -moz-border-left-colors: none; -moz-border-image: none;" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;O1.EmployeeID,O1.OrderID&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders&amp;nbsp;O1&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;JOIN&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;ROW_NUMBER()&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;OVER&lt;/span&gt;&lt;span style="color: #000000;"&gt;(PARTITION&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;BY&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;EmployeeID&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;ORDER&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;BY&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;OrderDate&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;DESC&lt;/span&gt;&lt;span style="color: #000000;"&gt;,OrderID&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;DESC&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;RowNumber,&lt;/span&gt;&lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Orders&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;OT&lt;br /&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;O2&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;ON&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;O1.OrderID&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;O2.OrderID&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;WHERE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;O2.RowNumber&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;这个ROW_NUMBER函数也是在SQL Server 2005后新增的，使用这个和方法3查不多，甚至比3更好，但要注意一点是先按EmployeeID分区，然后再排序。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;结合以上方法， 建议用方法3。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/xbf321/aggbug/2139942.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/xbf321/archive/2011/08/15/top-one-or-top-n-in-sql-server.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/xbf321/archive/2011/08/14/apply-in-sql-server.html</id><title type="text">SQL Server:APPLY表运算符</title><summary type="text">新增的APPLY表运算符把右表表达式应用到左表表达式中的每一行。它不像JOIN那样先计算那个表表达式都可以，APPLY必选先逻辑地计算左表达式。这种计算输入的逻辑顺序允许吧右表达式关联到左表表达式。APPLY有两种形式，一个是OUTER APPLY，一个是CROSS APPLY，区别在于指定OUTER，意味着结果集中将包含使右表表达式为空的左表表达式中的行，而指定CROSS，则相反，结果集中不包含使右表表达式为空的左表表达式中的行。</summary><published>2011-08-13T18:03:00Z</published><updated>2011-08-13T18:03:00Z</updated><author><name>兴百放</name><uri>http://www.cnblogs.com/xbf321/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xbf321/archive/2011/08/14/apply-in-sql-server.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xbf321/archive/2011/08/14/apply-in-sql-server.html"/><content type="html">&lt;p&gt;SQL Server 2005（含）以上版本，新增了APPLY表运算，为我们日常查询带来了极大的方便。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;新增的APPLY表运算符把右表表达式应用到左表表达式中的每一行。它不像JOIN那样先计算那个表表达式都可以，APPLY必选先逻辑地计算左表达式。这种计算输入的逻辑顺序允许吧右表达式关联到左表表达式。&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;　　APPLY有两种形式，一个是OUTER APPLY，一个是CROSS APPLY，区别在于指定OUTER，意味着结果集中将包含使右表表达式为空的左表表达式中的行，而指定CROSS，则相反，结果集中不包含使右表表达式为空的左表表达式中的行。&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;用几个例子解释这个会更清晰。&lt;/p&gt;&#xD;
&lt;p&gt;例1：&lt;span style="color: red"&gt;CROSS APPLY 形式&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;比如：LargeTable表中的某一列存储的数据是以&amp;#8220;:&amp;#8221;号分隔的数据，我们处理的时候，可能要先把这个值，先分隔，然后把分隔后的每个值单独一行放在一张表中，然后对这个表做处理。 &lt;/p&gt;&#xD;
&lt;p&gt;原始数据（LargeTable表）：&lt;br /&gt;　　&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/xbf321/apply_1.PNG" border="0" height="141" width="414" /&gt; &lt;/p&gt;&#xD;
&lt;p&gt;为了简单，我们先拿其中id=2的一行处理，这些以:号分隔的数据，可能是我们某张表的主键（t1），我们可能需要把这些数值提出来，放在一张临时表中，和t1表关联，做一些处理。&lt;/p&gt;&#xD;
&lt;p&gt;处理这个分隔的数据结果如下图：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/xbf321/apply_2.PNG" border="0" height="212" width="162" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如果用之前的版本处理这个操作的话，应该很发杂，暂时没想到怎么处理，如果有人实现过，可以提示一下。&lt;/p&gt;&#xD;
&lt;p&gt;这只是用其中一行做的处理，如果我们用上图的3行都做这样处理，把三行以:号分隔的数值都放在一个表中，该怎么处理呢？&lt;/p&gt;&#xD;
&lt;p&gt;今天的主角APPLY该闪亮登场了。用APPLY表运算符一行语句就能处理以上操作。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="border-bottom: medium none; border-left: medium none; margin-left: 25px; border-top: medium none; border-right: medium none" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;a&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;dbo.LargeTable&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;AS&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;LT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080"&gt;--&lt;/span&gt;&lt;span style="color: #008080"&gt;实际表&lt;/span&gt;&lt;span style="color: #008080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;CROSS&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;APPLY&amp;nbsp;dbo.split(LT.Name,&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;:&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080"&gt;--自定义&lt;/span&gt;&lt;span style="color: #008080"&gt;表值函数，处理以某个字符分隔的数据，把这些数据，返回一张表&lt;/span&gt;&lt;span style="color: #008080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;a&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;''&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080"&gt;--&lt;/span&gt;&lt;span style="color: #008080"&gt;去掉结果表中a字段为空的数据&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;处理的结果如下图：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/xbf321/apply_3.PNG" border="0" height="498" width="394" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;是不是很简单。&lt;/p&gt;&#xD;
&lt;p&gt;需要额外定义的就是那个自定义表值函数（split），这是我在网上找的，类似.Net中Split操作，代码如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="border-bottom: medium none; border-left: medium none; margin-left: 25px; border-top: medium none; border-right: medium none" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #008080"&gt;/*&lt;/span&gt;&lt;span style="color: #008080"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;使用方法：SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;dbo.split('581::579::519::279::406::361::560',':')&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;*/&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;ALTER&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Function&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000"&gt;dbo&lt;/span&gt;&lt;span style="color: #ff0000"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #ff0000"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000"&gt;Split&lt;/span&gt;&lt;span style="color: #ff0000"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #008000"&gt;@Sql&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;varchar&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold"&gt;8000&lt;/span&gt;&lt;span style="color: #000000"&gt;),&lt;/span&gt;&lt;span style="color: #008000"&gt;@Splits&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;varchar&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold"&gt;10&lt;/span&gt;&lt;span style="color: #000000"&gt;))&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;returns&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;@temp&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Table&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(a&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;varchar&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold"&gt;100&lt;/span&gt;&lt;span style="color: #000000"&gt;))&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;As&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Begin&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Declare&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;@i&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Int&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Set&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;@Sql&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff00ff"&gt;RTrim&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff"&gt;LTrim&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #008000"&gt;@Sql&lt;/span&gt;&lt;span style="color: #000000"&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Set&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;@i&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff00ff"&gt;CharIndex&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #008000"&gt;@Splits&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #008000"&gt;@Sql&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;While&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;@i&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Begin&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Insert&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;@temp&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Values&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #808080"&gt;Left&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #008000"&gt;@Sql&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #008000"&gt;@i&lt;/span&gt;&lt;span style="color: #808080"&gt;-&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Set&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;@Sql&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff00ff"&gt;SubString&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #008000"&gt;@Sql&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #008000"&gt;@i&lt;/span&gt;&lt;span style="color: #808080"&gt;+&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #ff00ff"&gt;Len&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #008000"&gt;@Sql&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #808080"&gt;-&lt;/span&gt;&lt;span style="color: #008000"&gt;@i&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Set&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;@i&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff00ff"&gt;CharIndex&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #008000"&gt;@Splits&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #008000"&gt;@Sql&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;End&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;If&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;@Sql&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;''&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Insert&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;@temp&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Values&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #008000"&gt;@Sql&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Return&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;End&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;例2：&lt;span style="color: red"&gt;OUTER APPLY 形式&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: red"&gt;　　&lt;/span&gt;&lt;span&gt;场景：有个供货商表（Supplier）和供货商产品表（Products）,我们要取每一个供货商中单价最高的两个产品。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;　　供货商表：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: red"&gt;　　&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/xbf321/apply_4_1.PNG" border="0" height="172" width="367" /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: red"&gt;　　&lt;/span&gt;&lt;span&gt;供货商产品表：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: red"&gt;　　&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/xbf321/apply_5_1.PNG" border="0" height="179" width="434" /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: red"&gt;　　&lt;/span&gt;&lt;span&gt;首先，我们创建一个自定义表值函数（dbo.fn_top_products），该函数根据供货商ID返回单价最高的两个商品。&lt;/span&gt;&lt;span style="color: red"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div style="border-bottom: medium none; border-left: medium none; margin-left: 25px; border-top: medium none; border-right: medium none" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #0000ff"&gt;IF&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff00ff"&gt;OBJECT_ID&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;dbo.fn_top_products&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;IS&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;NOT&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;DROP&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;FUNCTION&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;dbo.fn_top_products;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;GO&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;--&lt;/span&gt;&lt;span style="color: #008080"&gt;根据供货商ID获得单价最高的两件商品&lt;/span&gt;&lt;span style="color: #008080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;CREATE&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;FUNCTION&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;dbo.fn_top_products&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #008000"&gt;@supid&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;AS&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;INT&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;RETURNS&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;TABLE&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;AS&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;RETURN&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;TOP&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold"&gt;2&lt;/span&gt;&lt;span style="color: #000000"&gt;)Id&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;AS&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ProductId,ProductName,UnitPrice&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;dbo.Products&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;SupplierId&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;@supid&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;ORDER&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;BY&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;UnitPrice&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;DESC&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;GO&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;好，前期的数据都已经准备好了，下面让我们试试用OUTER APPLY形式来查询，会出现什么结果。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;执行以下语句：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div style="border-bottom: medium none; border-left: medium none; margin-left: 25px; border-top: medium none; border-right: medium none" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;S.id&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;AS&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;SupplierId,S.CompanyName,UnitPrice&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;dbo.Supplier&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;AS&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;S&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;OUTER&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;APPLY&amp;nbsp;dbo.fn_top_products(S.id)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;AS&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;P&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;执行结果如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/xbf321/apply_6_1.PNG" border="0" height="146" width="311" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;注意最后为NULL的记录，reed公司因为没有商品，所以单价为NULL了。&lt;/p&gt;&#xD;
&lt;p&gt;如果用CROSS APPLY形式，执行以下查询：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="border-bottom: medium none; border-left: medium none; margin-left: 25px; border-top: medium none; border-right: medium none" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;S.id&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;AS&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;SupplierId,S.CompanyName,UnitPrice&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;dbo.Supplier&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;AS&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;S&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;CROSS&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;APPLY&amp;nbsp;dbo.fn_top_products(S.id)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;AS&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;P&lt;/span&gt;　　　&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;生成的输出结果如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/xbf321/apply_7.PNG" border="0" height="116" width="284" /&gt;　　&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;大家看出OUTER APPLY和CROSS APPLY的区别了吧。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;再次说一下APPLY的执行过程，它先逻辑计算左表表达式（以上的LargeTable表），然后把右表达式（以上的自定义表值函数Split）应用到左表表达式的每一行。实际是把外部查询的列引用作为参数传递给表值函数。&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/xbf321/aggbug/2137635.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/xbf321/archive/2011/08/14/apply-in-sql-server.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/xbf321/archive/2011/08/09/sql-server-exec-sessions.html</id><title type="text">SQL Server:查询当前服务器有多少连接请求</title><summary type="text">有时DBA需要检查当前服务器有多少连接请求，以及连接请求的登录名，客户端版本，主机名，程序名等等之类的信息，我们就可以对服务器的连接状况有所了解，防止不明用户使用。 SQL Server本身提供了这么一个DMV来返回这些信息，它就是sys.dm_exec_sessions 。 比如在我的机器上做一下查询： SELECT*FROMsys.dm_exec_sessionsWHEREhost_nameISNOTNULL 如图： 我们也可以根据登录名来分组： SELECTlogin_name,COUNT(session_id)ASsession_countFROMsys.dm_exec_sessio.</summary><published>2011-08-09T10:25:00Z</published><updated>2011-08-09T10:25:00Z</updated><author><name>兴百放</name><uri>http://www.cnblogs.com/xbf321/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xbf321/archive/2011/08/09/sql-server-exec-sessions.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xbf321/archive/2011/08/09/sql-server-exec-sessions.html"/><content type="html">&lt;p&gt;有时DBA需要检查当前服务器有多少连接请求，以及连接请求的登录名，客户端版本，主机名，程序名等等之类的信息，我们就可以对服务器的连接状况有所了解，防止不明用户使用。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;SQL Server本身提供了这么一个DMV来返回这些信息，它就是sys.dm_exec_sessions 。&lt;br /&gt;&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;比如在我的机器上做一下查询：　　&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;　　&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sys.dm_exec_sessions&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;WHERE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;host_name&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;IS&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;NOT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;NULL&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;如图：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/xbf321/sql_server_session.png" height="165" width="932" /&gt;&lt;/p&gt;&lt;p&gt;我们也可以根据登录名来分组：&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;login_name&amp;nbsp;,&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;COUNT&lt;/span&gt;&lt;span style="color: #000000;"&gt;(session_id)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;session_count&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sys.dm_exec_sessions&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;GROUP&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;BY&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;login_name;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;查询结果如图：&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/xbf321/sql_server_session2.png" height="155" width="404" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;对于这张表的详细字段说明，请参考MSDN&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/ms176013.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms176013.aspx&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/xbf321/aggbug/2132690.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/xbf321/archive/2011/08/09/sql-server-exec-sessions.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/xbf321/archive/2011/08/04/sql-server-about-null.html</id><title type="text">SQL Server：关于Null的一些事</title><summary type="text">我们设计表时，在字段是否允许Null值这个问题上，有时会争论一番。数据库牛人Kalen Delaney则给了一下建议    1，永远不要在用户表中允许NULL值    2，在用户表定义中包含一个NOT NULL限制    3，不要依赖数据库属性来控制NULL值的行为</summary><published>2011-08-04T10:12:00Z</published><updated>2011-08-04T10:12:00Z</updated><author><name>兴百放</name><uri>http://www.cnblogs.com/xbf321/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xbf321/archive/2011/08/04/sql-server-about-null.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xbf321/archive/2011/08/04/sql-server-about-null.html"/><content type="html">&lt;div&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;我们设计表时，在字段是否允许Null值这个问题上，有时会争论一番。数据库牛人Kalen Delaney则给了一下建议&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;1，永远不要在用户表中允许NULL值&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;2，在用户表定义中包含一个NOT NULL限制&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;3，不要依赖数据库属性来控制NULL值的行为&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;对于第一点，我们反向说，如果允许NULL，会给我们带来什么影响。&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;1，SQL 在每条记录中都设置了一个特殊的bitmap来显示哪些允许空值的列上存储的真的是空值。如果是NULL，在访问每一行的时候SQL Server都必须对这个bitmap进行解码。&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;2，允许NULL还增加了应用程序代码的复杂度，总的添加一些特殊的逻辑来处理这个NULL值，这常常会导致bug。&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;第二点，在包含不允许NULL的列上，要加入一些默认值，如果不允许NULL，但是还没有加默认值，在没有显示列插入的话，就会造成INSERT的失败，SQL Server默认在INSERT中，对没有显示的列做NULL插入。&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;最后一点，主要涉及到于NULL值的比较。在我们印象中，是用IS NULL,IS NOT NULL比较呢，还是用=,&amp;lt;&amp;gt;比较呢。这取决于数据库选项ANSI NULLS，我们不可能更改数据库选项（我们大部分不是DBA），但是我们可以使用会话设置SET ANSI_NULLS相当于数据库选项ANSI NULLS。当这个选项为真是，所有与空值的比较都将得出FALSE，代码必须使用IS NULL条件来判断是否为空，而当这个选项为假时，如果进行比较的两个值都是空值将得出TRUE，SQL Server允许将 =NULL作为IS NULL的同义词，将&amp;lt;&amp;gt; NULL 作为IS NOT NULL的同义词。&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;如果忘记这个选项，建议用IS NULL判断空，IS NOT NULL判断非空。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 测试如下：&lt;/div&gt;&lt;p&gt;在t3表中只有两行数据，如图：&lt;br /&gt;　　&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/xbf321/null_2.png" height="179" width="205" /&gt;&lt;/p&gt;&lt;p&gt;SET ANSI_NULLS OFF 时：&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/xbf321/null_1.png" height="188" width="329" /&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;SET ANSI_NULLS ON 时 &lt;br /&gt;　　&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/xbf321/null_3.png" height="132" width="302" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/xbf321/aggbug/2127809.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/xbf321/archive/2011/08/04/sql-server-about-null.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
