兼容IE,FF浏览器,世界各地区域的JS时间计算
<table height=”25″ cellspacing=”0″ cellpadding=”0″ border=”0″>
<tbody>
<tr valign=”top”>
<td valign=”center”>北京时间[<span id="beijing">10:24:10</span>]</td>
<td valign=”center”>伦敦时间[<span id="london">02:24:10</span>]</td>
<td valign=”center”>纽约时间[<span id="newyork">21:24:10</span>]</td>
<td valign=”center”>芝加哥时间[<span id="chicago">20:24:10</span>]</td>
<td valign=”center”>东京时间[<span id="tokyo">11:24:10</span>]</td>
</tr>
</tbody>
</table>
//<![CDATA[
function time_rota()
{
var now;
var h,m,s;
now = new Date();
h=now.getHours();
m=now.getMinutes();
s=now.getSeconds();
h=((h < 10) ? "0" : "") + h;
m=((m < 10) ? "0" : "") + m;
s=((s < 10) ? "0" : "") + s;
document.getElementById('beijing').innerHTML = h + ":" + m + ":" + s;
setTimeout("time_rota()", 1000);
}
time_rota();
function time_rota1()
{
var now;
var h,m,s;
now = new Date();
h=now.getUTCHours();
h -= -0;
if(h<0)
{h += 24;}
m=now.getUTCMinutes();
s=now.getUTCSeconds();
h=((h < 10) ? "0" : "") + h;
m=((m < 10) ? "0" : "") + m;
s=((s < 10) ? "0" : "") + s;
document.getElementById('london').innerHTML = h + ":" + m + ":" + s;
setTimeout("time_rota1()", 1000);
}
time_rota1();
function time_rota2()
{
var now;
var h,m,s;
now = new Date();
h=now.getHours();
h -= 13;
if(h<0)
{h += 24;}
m=now.getMinutes();
s=now.getSeconds();
h=((h < 10) ? "0" : "") + h;
m=((m < 10) ? "0" : "") + m;
s=((s < 10) ? "0" : "") + s;
document.getElementById('newyork').innerHTML = h + ":" + m + ":" + s;
setTimeout("time_rota2()", 1000);
}
time_rota2();
function time_rota3()
{
var now;
var h,m,s;
now = new Date();
h=now.getUTCHours();
h -= -9;
if(h<=0)
{h += 24;}
m=now.getUTCMinutes();
s=now.getUTCSeconds();
h=((h < 10) ? "0" : "") + h;
m=((m < 10) ? "0" : "") + m;
s=((s < 10) ? "0" : "") + s;
document.getElementById('tokyo').innerHTML = h + ":" + m + ":" + s;
setTimeout("time_rota3()", 1000);
}
time_rota3();
function time_rota4()
{
var now;
var h,m,s;
now = new Date();
h=now.getUTCHours();
h -= 6;
if(h<=0)
{h += 24;}
m=now.getUTCMinutes();
s=now.getUTCSeconds();
h=((h < 10) ? "0" : "") + h;
m=((m < 10) ? "0" : "") + m;
s=((s < 10) ? "0" : "") + s;
document.getElementById('chicago').innerHTML = h + ":" + m + ":" + s;
setTimeout("time_rota4()", 1000);
}
time_rota4();
//]]>
兼容ff的加入收藏和设为首页代码
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″ />
<title>设为首页–加入收藏</title>
<script type=”text/javascript”>
function setHomePage(obj){
var aUrls=document.URL.split(“/”);
var vDomainName=”http://”+aUrls[2]+”/”;
try{//IE
obj.style.behavior=”url(#default#homepage)”;
obj.setHomePage(vDomainName);
}catch(e){//other
if(window.netscape) {//ff
try {
netscape.security.PrivilegeManager.enablePrivilege(“UniversalXPConnect”);
}
catch (e) {
alert(“此操作被浏览器拒绝!请在浏览器地址栏输入“about:config”并回车然后将[signed.applets.codebase_principal_support]设置为’true’”);
}
var prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch);
prefs.setCharPref(‘browser.startup.homepage’,vDomainName);
}
}
if(window.netscape)alert(“ff”);
}
function addFavorite(){
var aUrls=document.URL.split(“/”);
var vDomainName=”http://”+aUrls[2]+”/”;
var description=document.title;
try{//IE
window.external.AddFavorite(vDomainName,description);
}catch(e){//FF
window.sidebar.addPanel(description,vDomainName,”");
}
}</script>
</head>
<body>
<input type=”button” value=”设为首页” onclick=”setHomePage(this);” /> <input type=”button” value=”加入收藏” onclick=”addFavorite();” />
</body>
</html>
宝瓶网PC桌面应用程序
23个超流行的jQuery相册插件
本文罗列了23款目前非常受欢迎的jQuery插件,可以轻松建立起唯美的图片切换特效的相册功能,并且其中的一些还支持视频和Flash。
这些jQuery插件包括演示、文档说明等,欣赏吧!
1. Galleriffic
下载与文档 查看演示
2. jPhotoGrid
下载与文档 查看演示
3. Galleria
下载与文档 查看演示
4. YoxView
下载与文档 查看演示
5. Micro Image Gallery
下载与文档 查看演示
6. AD Gallery
下载与文档 查看演示
7. slideViewerPro
下载与文档 查看演示
8. Galleryview
下载与文档 查看演示
9. Pikachoose Image Gallery
下载与文档 查看演示
10. Multimedia Gallery for Images, Video and Audio
下载与文档 查看演示
11. Spacegallery
下载与文档 查看演示
12. jQuery Cycle
下载与文档 查看演示
13. Pikachoose
下载与文档 查看演示
14. s3Slider
下载与文档Tutorial & Downloads → View the Demo 查看演示→
15. slideViewer
下载与文档 查看演示
16. jFlow
下载与文档 查看演示
17. CrossSlide
下载与文档 查看演示
18. Slides – A Slideshow Plugin for jQuery
下载与文档 查看演示
19. jTag – Plugin to Tag Pictures & More
下载与文档 查看演示
20. Galleria – JavaScript Image Gallery Framework
下载与文档 查看演示
21. A Horizontal Accordion Plugin for jQuery
下载与文档 查看演示
22. jShowOff – A jQuery Content Rotator
下载与文档 查看演示
23. Zoomy – E-Magnification
下载与文档 查看演示
CSS布局:让页底内容永远固定在底部
我们在设计一些页面内容甚少的网页时(典型应用就是登陆页面),由于显示器的分辨率大,在正常情况下,假如页面内容高度小于浏览器高度时,页面底部以下会留下很大的空间,如:http://www.helloweba.com/demo/cssfooter/demo1.html
不管浏览器的高度怎么变化,我们要想让页底内容始终固定在底部,最终效果如:http://www.helloweba.com/demo/cssfooter/demo2.html
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>无标题文档</title>
<style type=”text/css”>
* {margin:0;padding:0;}
html, body {height: 100%;}
#wrap {min-height: 100%;}
#main {overflow:auto;background:#f7f7f7;
padding-bottom: 60px;} /* 必须使用和footer相同的高度 */
#footer {position: relative;
margin-top: -60px;
height: 60px;
clear:both;
background:#369}/*Opera Fix*/
body:before {
content:”";
height:100%;
float:left;
width:0;
margin-top:-32767px;
}</style>
<!–[if !IE 7]>
<style type=”text/css”>
#wrap {display:table;height:100%}
</style>
<![endif]–>
</head><body>
<div id=”wrap”>
<div id=”main”>
主体
</div></div>
<div id=”footer”>
这里是页底footer内容
</div></body>
</html>
mysql替换语句 部分替换
update tabel(表名) set Fields(字段名)=replace( Fields,’原内容’,'替换成的内容’)
UPDATE `cdb_pms`
SET `subject` = REPLACE(`subject`, ‘Welcome to’, ‘欢迎光临’)
WHERE INSTR(`subject`,’Welcome to’) > 0
替换cdb_posts表的message字段,将“viewthread.php?tid=3989”替换成“viewthread.php?tid=16546”
UPDATE `cdb_posts`
SET `message`= REPLACE(`message`, ‘viewthread.php?tid=3989′, ‘viewthread.php?tid=16546′)
WHERE INSTR(`message`,’viewthread.php?tid=3989′) > 0 ;
删除所有的空格
UPDATE `es_product` SET `pro_pub_time` = TRIM(`pro_pub_time`)
lower或者upper
删除所有饱含’['或者']‘或者’.'的字符
UPDATE `es_product` SET `pro_pub_time` = REPLACE(`pro_pub_time`, ‘[','') WHERE INSTR(`pro_pub_time`,'[') > 0
UPDATE `es_product` SET `pro_pub_time` = REPLACE(`pro_pub_time`, ']‘,”) WHERE INSTR(`pro_pub_time`,’]') > 0
UPDATE `es_product` SET `pro_pub_time` = REPLACE(`pro_pub_time`, ‘.’,'-’) WHERE INSTR(`pro_pub_time`,’.') > 0
替换所有含中文’-'的为英文’-’
UPDATE `es_product` SET `pro_pub_time` = REPLACE(`pro_pub_time`, ‘-’,'-’) WHERE INSTR(`pro_pub_time`,’-’) > 0
将所有的年月都替换成’-’
UPDATE `es_product` SET `pro_pub_time` = REPLACE(`pro_pub_time`, ‘年’,'-’) WHERE INSTR(`pro_pub_time`,’年’) > 0
UPDATE `es_product` SET `pro_pub_time` = REPLACE(`pro_pub_time`, ‘月’,'-’) WHERE INSTR(`pro_pub_time`,’月’) > 0
将所有’2005-04-’这种类型的替换成’2005-04-01′
UPDATE `es_product` SET `pro_pub_time` = CONCAT( `pro_pub_time`, ’01′) WHERE SUBSTRING_INDEX( `pro_pub_time`, ‘-’, -1) = ” AND LENGTH(`pro_pub_time`) > 0 AND LENGTH(`pro_pub_time`) > 5
将所有’2005-’这种类型替换成’2005-01-01′
UPDATE `es_product` SET `pro_pub_time` = CONCAT( `pro_pub_time`, ’01-01′) WHERE INSTR(`pro_pub_time`,’-') > 0 AND LENGTH(`pro_pub_time`) = 5
将所有 饱含’-',但是位数小于8的改成追加’-01′
UPDATE `es_product` SET `pro_pub_time` = CONCAT( `pro_pub_time`, ‘-01′) WHERE INSTR(`pro_pub_time`,’-') > 0 AND LENGTH(`pro_pub_time`) < 8
将所有’2005′这样的改成’2005-01-01′
UPDATE `es_product` SET `pro_pub_time` = CONCAT(`pro_pub_time`,’-01-01′) WHERE INSTR(`pro_pub_time`,’-') = 0 AND LENGTH(`pro_pub_time`) = 4
最后将所有’2005-01-01′格式化成’2005年01月’
UPDATE `es_product` SET `pro_pub_time` = DATE_FORMAT(`pro_pub_time`,’%Y年%m月’) WHERE INSTR(`pro_pub_time`,’-') > 0
批量替换 MySQL 指定字段中的字符串是数据库
应用中很常见的需求,但是有很多初学者在遇到这种需求时,通常都是用脚本来实现;其实,MySQL 内置的有批量替换语法,效率也会高很多;想了解具体方法
,继续阅读本文吧
批量替换的具体语法是:
Code:
UPDATE 表名 SET
指定字段 = replace(指定字段, ’要替换的字符串’, ’想要的字符串’)
WHERE 条件;
如果你想把 article 表中 ID 小于5000的记录,content 字段中“解决”替换成“解放”,那么语法就是:
Code:
UPDATE article SET
content = replace(content, ’解决’, ’解放’)
WHERE ID<5000;
UPDATE `fengsh_shoplist`
如何使用Sphinx来实现全文检索(搜索)功能
前年(2009)在参与开发CMSTOP系统时,就知道此CMS使用Sphinx实现进行全文检索功能。但那时候自己并没有这功能的开发。不过了解了Sphinx的全文搜索的强大功能。这次,在新的公司,也要做一个全文搜索功能。第一时间就想到了Sphinx来进行功能的实现。
当然在实际上,Sphinx对中文的分词功能并不好。可是很庆幸地是,Coreseek很好地帮我们解决了这一个问题。在这里很感谢此团队为开源事业做出的贡献。Sphinx能得到很多人的认同与用使用,很大一部分功劳和这团队关系。关于此团队更多信息可查看Coreseek首页。
下面我就基本地简介一下如何使用Sphinx来实现全文检索功能,当然大部分安装信息都是在Coreseek主站上直接copy下来,因为他们写的实在太详细了。让我没有任何可发挥的地方。
1.下载Sphinx 支持中文分词Coreseek http://www.coreseek.cn/news/11/52/
2.进行安装:参考http://www.coreseek.cn/products-install/install_on_bsd_linux/
##下载coreseek:coreseek 3.2.14:点击下载、coreseek 4.0.1:点击下载
$ wget http://www.coreseek.cn/uploads/csft/3.2/coreseek-3.2.14.tar.gz $ 或者 http://www.coreseek.cn/uploads/csft/4.0/coreseek-4.0.1-beta.tar.gz $ tar xzvf coreseek-3.2.14.tar.gz 或者 coreseek-4.0.1-beta.tar.gz $ cd coreseek-3.2.14 或者 coreseek-4.0.1-beta
##安装mmseg
$ cd mmseg-3.2.14 $ ./bootstrap #提示中如无error可以不用理会 $ ./configure --prefix=/usr/local/mmseg3 $ make && make install $ cd ..
##安装coreseek,需提前安装mysql依赖库及操作系统基础开发库以支持mysql数据源和xml数据源
$ cd csft-3.2.14 或者 cd csft-4.0.1 $ sh buildconf.sh #提示中如无error可以不用理会 $ ./configure --prefix=/usr/local/coreseek --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql ##如果提示mysql问题,可以查看MySQL数据源安装说明 $ make && make install $ cd ..
##测试mmseg分词,coreseek搜索(需要预先设置好字符集为zh_CN.UTF-8,确保正确显示中文)
$ cd testpack $ cat var/test/test.xml #此时应该正确显示中文 $ /usr/local/mmseg3/bin/mmseg -d /usr/local/mmseg3/etc var/test/test.xml $ /usr/local/coreseek/bin/indexer -c etc/csft.conf --all
3.增加Sphinx增量索引
a.先建立一个计数表
CREATE TABLE sph_counter(
counter_id INTEGER PRIMARY KEY NOT NULL,
max_doc_id INTEGER NOT NULL
);
b.修改sphinx.conf
#主要数据源
source main
{
type = mysql
sql_host = localhost
sql_user = oophp
sql_pass = oophp.cn
sql_db = oophp
sql_port = 3306
sql_query_pre = SET NAMES utf8
sql_query_pre =REPLACE INTO sph_counter SELECT 1, MAX(id) FROM dede_archives
sql_query = Select * From article where channel=3 AND id<=( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
#sql_query第一列id需为整数
#title、content作为字符串/文本字段,被全文索引
#sql_attr_uint =id #从SQL读取到的值必须为整数
#sql_attr_timestamp =pubdata_attr #从SQL读取到的值必须为整数,作为时间属性
sql_query_info_pre = SET NAMES utf8 #命令行查询时,设置正确的字符集
sql_query_info = Select * From article WHERE channel=3 AND id=$id
}
#增量数据源
source delta : main
{
sql_query_pre =SET NAMES utf8
sql_query = Select * From article where channel=3 AND \
id>( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
}
#主索引生成
index main
{
source = main #对应的source名称
path = /usr/local/coreseek/data/main/ #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
docinfo = extern
mlock = 0
morphology = none
min_word_len = 1
html_strip = 0
ngram_len=0
#中文分词配置,详情请查看:http://www.coreseek.cn/products-install/coreseek_mmseg/
charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾
#charset_dictpath = etc/ #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...
charset_type = zh_cn.utf-8
#charset_type = utf-8
#charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
#ngram_chars = U+3000..U+2FA1F
}
#增量索引
index delta : main
{
source = delta #对应的source名称
path = /usr/local/coreseek/data/delta/ #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
}
#全局index定义
indexer
{
mem_limit = 128M
}
#searchd服务定义
searchd
{
listen = 9312
read_timeout = 5
max_children = 30
max_matches = 1000
seamless_rotate = 0
preopen_indexes = 0
unlink_old = 1
pid_file = /var/log/searchd.pid #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
log = /var/log/searchd_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
query_log = /var/log/query_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
binlog_path = #关闭binlog日志
}
c.启动sphinx服务,并生成主索引
#/usr/local/coreseek/bin/searchd # /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/sphinx.conf main --rotate
d.建立生成主索引和增量索引shell脚本
build_main_index.sh脚本: #!/bin/sh #/usr/local/coreseek/bin/searchd --stop /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/sphinx.conf main --rotate build_delta_index.sh脚本: #!/bin/sh #/usr/local/coreseek/bin/searchd --stop /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/sphinx.conf delta --rotate /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/sphinx.conf --merge main delta --merge-dst-range deleted 0 0 --rotate #/usr/local/coreseek/bin/searchd
e.写入cron计划任务中,生成增量索引,并重新建立主索引
//每10分钟生成一次索引 */10 * * * * /bin/sh /usr/local/coreseek/build_delta_index.sh >/dev/null 2>&1 //每天凌晨3点过5分,重新建立一次主索引 5 3 * * * /bin/sh /usr/local/coreseek/build_main_index.sh > /dev/null 2>&1
参考网站:
http://sphinxsearch.com/
http://www.coreseek.cn/
http://www.sphinxsearch.org/archives/category/sphinx
http://blog.c1gstudio.com/archives/730
MYSQL查询多余重复的记录
(一)
1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断
select * from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
delete from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)
3、查找表中多余的重复记录(多个字段)
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
delete from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
(二)
比方说
在A表中存在一个字段“name”,
而且不同记录之间的“name”值有可能会相同,
现在就是需要查询出在该表中的各记录之间,“name”值存在重复的项;
Select Name,Count(*) From A Group By Name Having Count(*) > 1
如果还查性别也相同大则如下:
Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1
(三)
方法一
declare @max integer,@id integer
declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) >; 1
open cur_rows
fetch cur_rows into @id,@max
while @@fetch_status=0
begin
select @max = @max -1
set rowcount @max
delete from 表名 where 主字段 = @id
fetch cur_rows into @id,@max
end
close cur_rows
set rowcount 0
方法二
有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。
1、对于第一种重复,比较容易解决,使用
select distinct * from tableName
就可以得到无重复记录的结果集。
如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp
发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。
2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下
假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
select identity(int,1,1) as autoID, * into #Tmp from tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
select * from #Tmp where autoID in(select autoID from #tmp2)
最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)
(四)
查询重复
select * from tablename where id in (
select id from tablename
group by id
having count(id) > 1
)
PHP中跳出多重循环使用break,continue,goto,return,exit的区别
今天在写一段PHP程序时,犯了一个小错误结果耽误了很长时间,后来发现原来是多重循环没有控制好的问题。后来整理了在PHP中跳出循环的各种用法,以及它们的区别,与大家分享。
PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:
continue
continue 是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。
例如在下面的这段PHP代码片段中:
<?php
for($i = 1;$i <= 100; $i++ ){
if($i % 3 == 0 || $i % 7 == 0){
continue;
}
& #160; else{
echo”$i \n<br/>”;
}
}
?>
PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。
break
break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。
看下面这个多重循环嵌套的例子:
for($i = 1;$i <= 10; $i++ ){
for($j = 1;$j <= 10;$j++){
$m = $i * $i + $j * $j;
echo”$m \n<br/>”;
if($m < 90 || $m > 190) {
break 2;
}
}
}
这里使用了break 2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。
goto
goto实 际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置 跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto 的支持,所以应该尽量避免使用goto。
下面的是一个使用了goto跳出循环的例子
for($i = 1000;$i >= 1 ; $i– ){
if( sqrt($i) <= 29){
goto a;
}
echo “$i”;
}
a:
echo” this is the end”;
例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。
exit
exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。
<?php
for($i = 1000;$i >= 1 ; $i– ){
if( sqrt($i) >= 29){
echo”$i \n<br/>”;
}
else{
exit;
}
}
echo”本行将不会被输出”;
?>
上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web 页面里面,甚至连exit后面的html代码都不会被输出。
return
return 语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可 以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序 执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停 止执行
<?php
for($i = 1000;$i >= 1 ; $i– ){
if( sqrt($i) >= 29){
echo”$i \n<br/>”;
}
else{
return;
}
}
echo”本行将不会被输出”;
?>
这里的例子和上面使用exit的效果是一样的。
在循环结束条件,自然跳出
这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。
以上是PHP中跳出循环的几种方式的简单总结。























