编程论坛
400万+工程师在用
400万+工程师在用

电子发烧友网工程师

17年用户 16436经验值
擅长:可编程逻辑 MEMS/传感技术 测量仪表 模拟技术 控制/MCU RF/无线
私信 关注

InString 函数程序

2009-1-11 09:03

<p><font face="Verdana">InString 函数程序</font></p>
<p><font face="Verdana">&lt;?php <br/>/* 这个函数返回字串S1在字串S2中的位置。如果S2中没有包含S1,那么就返回0 */ <br/>function InStr($s1, $s2) <br/>{ <br/>&nbsp;&nbsp;&nbsp;&nbsp; //检查是否合法输入<br/>&nbsp;&nbsp;&nbsp; IF(!(is_string($s1) &amp;&amp; is_string($s2))) return 0; </font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; $s1len = strlen($s1); <br/>&nbsp;&nbsp;&nbsp; $s2len = strlen($s2); </font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp; //检查S1是否在S2中 <br/>&nbsp;&nbsp;&nbsp; if(!ereg($s1, $s2)) return 0; </font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp; //如果是一个简单的实例 <br/>&nbsp;&nbsp;&nbsp; if($s1 == $s2) return 1; </font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp; //设置最小搜索次数 <br/>&nbsp;&nbsp;&nbsp; $begin = 0; <br/>&nbsp;&nbsp;&nbsp; $end = $s2len - $s1len; </font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp; //初始搜索位置 <br/>&nbsp;&nbsp;&nbsp; $position = 0; </font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp; //做一个s2 在 s1的二进制的搜索&nbsp; <br/>&nbsp;&nbsp;&nbsp; while($end &gt; $begin + 1) <br/>&nbsp;&nbsp;&nbsp; { <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $middle = ceil(($begin + $end) / 2); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $leftBegin = $begin; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $rightBegin = $middle + $s1len; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $leftEnd = $middle; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $rightEnd = $end + $s1len; </font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //先检查左边<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(ereg($s1, substr($s2, $leftBegin, $rightBegin - $leftBegin))) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $end = $middle; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else&nbsp; //(ereg($s1, substr($s2, $leftEnd, $rightEnd - $leftEnd))) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $position += $middle - $begin; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $begin = $middle; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br/>&nbsp;&nbsp;&nbsp; } </font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; if(ereg($s1, substr($s2, $end, $s1len))) $position++; </font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp; //返回所在的位置<br/>&nbsp;&nbsp;&nbsp; return $position + 1; <br/>} <br/>?&gt; </font></p>
<p><font face="Verdana"></font>&nbsp;</p>

更多回帖

打开APP