php 中的strpos函数怎么识别不了大于号小于号怎么写啊

后使用快捷导航没有帐号?
查看: 3753|回复: 7
等于号操作符重载函数
操作符重载!?日语不知道啊,通常你说英语就行了,日语一般是音译的。
兄弟学object-oriented programming?
谢谢哦!后面的我知道,应该是 オーバーロード関数
我想问“大于号、小于号和等于号”放在这个位置怎么表达?
より大きい、放在这里不合适呀
a & bはa大なりb
a =bはイコールb
a & bはa小なりb
イコール オーバーロード関数 と言う読み方?
イコール=
日本人一般都用英语表达,数学符号是全世界通用的。
头像被屏蔽
提示: 作者被禁止或删除 内容自动屏蔽
Powered byPHP中strpos、strstr和stripos、stristr函数分析
投稿:lijiao
字体:[ ] 类型:转载 时间:
这篇文章主要为大家详细介绍了PHP中strpos、strstr和stripos、stristr函数源码,感兴趣的朋友可以参考一下
本文为大家分析了 PHP中strpos、strstr和stripos、stristr函数,供大家参考,具体内容如下
mixed strpos ( string $haystack, mixed $needle [, int $offset = 0 ] )
如果offset指定了,查找会从offset的位置开始。offset不能为负数。
返回needle第一次出现在haystack的位置。如果在haystack中找不到needle,则返回FALSE。
needle,如果needle不是字符串,它会被转换成整型数值并赋值为该数值的ASCII字符。请看下面例子。
$str = "hello";
$pos = strpos($str, 111);
// 111的ASCII值是o,因此$pos = 4
strpos核心源码
if (Z_TYPE_P(needle) == IS_STRING) {
if (!Z_STRLEN_P(needle)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty needle");
RETURN_FALSE;
// 调用php_memnstr函数查找needle
found = php_memnstr(haystack + offset,
Z_STRVAL_P(needle),
Z_STRLEN_P(needle),
haystack + haystack_len);
// 如果不是字符串,转换成数字并赋值为该数字的ASCII字符。
if (php_needle_char(needle, needle_char TSRMLS_CC) != SUCCESS) {
RETURN_FALSE;
//设置结束字符
needle_char[1] = 0;
found = php_memnstr(haystack + offset,
needle_char,
haystack + haystack_len);
有一点要注意的是,如果needle不是字符串的话,会调用php_needle_char函数将needle转成整型数字并转换为其ASCII值。
函数最后返回的是found,php_memnstr函数实现了查找的方法。那么再继续看看php_memnstr函数做了什么:
#define php_memnstr zend_memnstr
php_memnstr是函数zend_memnstr的宏定义,查看zend_memnstr函数如下:
static inline char *
zend_memnstr(char *haystack, char *needle, int needle_len, char *end)
char ne = needle[needle_len-1];
if (needle_len == 1) {
return (char *)memchr(p, *needle, (end-p));
if (needle_len & end-haystack) {
return NULL;
// 第一个优化,只查找end - needle_len次
end -= needle_
while (p &= end) {
// 第二个优化,先判断字符串的开头和结尾是否一样再判断整个字符串
if ((p = (char *)memchr(p, *needle, (end-p+1))) && ne == p[needle_len-1]) {
if (!memcmp(needle, p, needle_len-1)) {
if (p == NULL) {
return NULL;
return NULL;
第一个优化,因为(char *)memchr(p, *needle, (end-p+1)是在end – needle_len + 1(即haystack_len+1)中查找,如果p为空,说明needle的第一个字符在p中从未出现过。
string strstr ( string $haystack, mixed $needle [, bool $before_needle = false ] )
返回needle在haystack中第一次出现的位置到结束的字符串。
这个函数的区分大小写的。
如果needle在haystack中不存在,返回FALSE。
如果before_needle为true,则返回haystack中needle在haystack第一次出现的位置之前的字符串。
strstr核心源码
if (found) {
// 计算出found的位置
found_offset = found -
if (part) {
RETURN_STRINGL(haystack, found_offset, 1);
RETURN_STRINGL(found, haystack_len - found_offset, 1);
strstr函数的前半部分跟strpos类似,区别在于strstr函数在找到位置后,需要返回haystack部分的字符串。part变量就是调用strstr函数时传递的before_needle变量。
mixed stripos ( string $haystack, string $needle [, int $offset = 0 ] )
不区分大小写的strpos。实现方式跟下面的类似,主要是使用一份拷贝然后将需要比较的字符串转换成小写字符后进行再进行查找。
string stristr ( string $haystack, mixed $needle [, bool $before_needle = false ] ) 不区分大小写的strstr。
// 拷贝一份haystack
haystack_dup = estrndup(haystack, haystack_len);
if (Z_TYPE_P(needle) == IS_STRING) {
char *orig_
if (!Z_STRLEN_P(needle)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty needle");
efree(haystack_dup);
RETURN_FALSE;
orig_needle = estrndup(Z_STRVAL_P(needle), Z_STRLEN_P(needle));
// 调用php_stristr函数找出orig_needle的值。
found = php_stristr(haystack_dup, orig_needle,
haystack_len, Z_STRLEN_P(needle));
efree(orig_needle);
if (php_needle_char(needle, needle_char TSRMLS_CC) != SUCCESS) {
efree(haystack_dup);
RETURN_FALSE;
needle_char[1] = 0;
found = php_stristr(haystack_dup, needle_char,
haystack_len, 1);
if (found) {
found_offset = found - haystack_
if (part) {
RETVAL_STRINGL(haystack, found_offset, 1);
RETVAL_STRINGL(haystack + found_offset, haystack_len - found_offset, 1);
RETVAL_FALSE;
// 释放变量
efree(haystack_dup);
可以知道,found是从php_stristr中得到的,继续查看php_stristr函数:
PHPAPI char *php_stristr(char *s, char *t, size_t s_len, size_t t_len)
php_strtolower(s, s_len);
php_strtolower(t, t_len);
return php_memnstr(s, t, t_len, s + s_len);
这个函数的功能就是将字符串都转成小写之后调用php_mennstr函数来查找needle在haystack第一次出现的位置。
因为strpos/stripos返回的是位置,位置从0开始计算,所以判断查找失败都用=== FALSE更适合。
阅读PHP的源码收获挺多,一方面可以知道某个函数的具体实现原理是怎样的,另一方面可以学习到一些编程优化方案。
以上就是本文的全部内容,希望对大家学习php程序设计有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具php strstr、stristr、strpos函数比较-Php入门-Php教程-壹聚教程网php strstr、stristr、strpos函数比较
在字符查找时在php中为我们提供了三个函数 strstr、stristr、strpos,它们三个的用法有点区别下面我们来一下介绍相关函数。
string strstr ( string haystack, string needle)
返回haystack中从needle开始到结束的字符串.
如果没有返回值,即没有发现needle,则返回FALSE
注: 这个函数是大小写敏感的。
$city_str=fopen(cgi_path.&/data/weather/city.dat&,&r&);
$city_ch=fread($city_str,filesize(cgi_path.&/data/weather/city.dat&));
$city_ch_arr=explode(&|&,$city_ch);
//如果能匹配到所在市
if(strstr($area_ga,&市&)){
foreach($city_ch_arr as $city_ch_arr_item){
& if(@strstr($area_ga,$city_ch_arr_item)){
&& echo $area_ga.'&br&';
&& echo $city_ch_arr_
&& $s_city=$city_ch_arr_
}//如果找不到市 那么看看是不是能找到省 有时会有这样的情况:广东省长城宽带 这样的一律归属到该省省府
elseif(strstr($area_ga,&河北&)!==false){
$s_city=&石家庄&;
city.dat中是一些城市 格式是这样的
广州|深圳|汕头|惠州
更多详细内容请查看:
&stristr() 函数查找字符串在另一个字符串中第一次出现的位置。
如果成功,则返回字符串的其余部分(从匹配点)。如果没有找到该字符串,则返回 false。
&echo stristr(&Hello world!&,&WORLD&);
strpos介绍
相对于前两者查找成功后返回的是字符,strpos查找成功后则是返回的是位置。因为位置有可能是0,所以判断查找失败使用===false更合适。
strpos的性能比较好,如果只是判断needle是否在字符串haystack中,则使用strpos较好,它将占用更少的内存和获得更快的执行速度。但是strpos对特殊字符支持不好,比如对中文就不能很好支持
echo strpos(&Hello world!&,&wo&);
注释:该函数对大小写敏感。如需进行对大小写不敏感的搜索,请使用 stripos() 函数。
结合上面实例我们得出结论
strstr 区别大小写,从字符开始找如果有返回true否则就返回false
stristr 字符不区别大小写,从字符开始找如果有返回true否则就返回false
strpos 区别大小写strpos查找成功后则是返回的是位置。因为位置有可能是0,所以判断查找失败使用===false更合适。
上一页: &&&&&下一页:相关内容EclipsePHP编写程序大于号小于号出错是怎么回事_百度知道
EclipsePHP编写程序大于号小于号出错是怎么回事
就是编写尖括号的时候出错,不知道是怎么回事尖括号的颜色不变成蓝色,运行的时候尖括号就出错了
提问者采纳
通常最常见的错误是中文符号或者全角半角的问题,不过都是肉眼能看出来区别的,所以这点可以检查看看,不一定能解决。还有一种原因是大于号小于号的前后有其他地方写错了符号,正好与那个大于号小于号对上了,EclipsePHP就会提示是靠前的一个符号错误,也是检查一下是哗单糕竿蕹放革虱宫僵否有写错就好。
提问者评价
其他类似问题
为您推荐:
eclipsephp的相关知识
其他1条回答
撒反复反复反复反复
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁PHP中比较时间大小实例
(window.slotbydup=window.slotbydup || []).push({
id: '2611110',
container: s,
size: '240,200',
display: 'inlay-fix'
您当前位置: &
[ 所属分类
作者 红领巾 ]
神马时间比较呢?最简单的例子就是可以把两个时间用大于小于号进行两个时间的对比。有时候我们设计程序,需要控制用户操作某个功能时只能在某个时间段内可以操作,其余时间段不允许。比如,我有一个发布消息的网站,我这个网站上发布消息,然后我在通过这个消息群发给上千用户。按照普通做法,应该就是一旦发布消息,就立即把消息群发给上千用户。这样一来,只要一有最新消息,用户就第一时间收到手机短信。可是,问题来了。比如我要是在深夜凌晨发布信息,那可就遭到所有用户XXOO了。所以,这里可以用到时间比较,要是在白天时间就可以发布,晚上则阻止。我们假设白天时间段从早上七点(七点估计好多人都没睡醒)到下午六点,那么我们可以这么下。复制代码 代码如下:/**&* PHP时间比较&*/// 定义开始时间,注意时间是字符串格式,所以必须用引号引起来否则报错别找我,另外里边的冒号必须是英文冒号$start_time = '7:00';&// 定义结束时间,千万别问我下午六点为何写成十八点,我会建议你重读小学$end_time& = '18:00';&// 获取现在时间段,date()函数的使用我就不废话了,不明白的直接看以往文章或者google$now_time& = date('H:i');&// 判断if( $start_time&=$now_time && $end_time&=$now_time ){&&&& echo '我要发布信息啦!';}else{&&&& echo '大哥,现在才几点啊~~~人家都还没睡醒呢!!!';}这里需要提醒下,获取的现在的时间是服务器时间,所以请注意服务器时间的时区设置以及是否准时,或者可以来个计划任务让它每天校对就万事OK了
本文开发(php)相关术语:php代码审计工具 php开发工程师 移动开发者大会 移动互联网开发 web开发工程师 软件开发流程 软件开发工程师
转载请注明本文标题:本站链接:
分享请点击:
1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
应将拖延当作你最可怕的仇敌,因为他要窃去你的时间,品格、能力、机会和自由,而使你成为他的奴隶-马尔顿
手机客户端
,专注代码审计及安全周边编程,转载请注明出处:http://www.codesec.net
转载文章如有侵权,请邮件 admin[at]codesec.net}

我要回帖

更多关于 大于号小于号怎么写 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信