php查询子字符串位置代码

来源:互联网 发布:vue angular 知乎 编辑:程序博客网 时间:2024/06/05 16:52
  1. <?php 
  2. /* 这个函数返回字串S1在字串S2中的位置。如果S2中没有包含S1,那么就返回0 */ 
  3. function InStr($s1, $s2) 
  4. //检查是否合法输入
  5. if(!(is_string($s1) && is_string($s2))) return 0; 

  6. $s1len = strlen($s1); 
  7. $s2len = strlen($s2); 

  8. //检查S1是否在S2中 
  9. if(!ereg($s1, $s2)) return 0; 

  10. //如果是一个简单的实例 
  11. if($s1 == $s2) return 1; 

  12. //设置最小搜索次数 
  13. $begin = 0; 
  14. $end = $s2len - $s1len; 

  15. //初始搜索位置 
  16. $position = 0; 

  17. //做一个s2 在 s1的二进制的搜索 
  18. while($end > $begin + 1) 
  19. $middle = ceil(($begin + $end) / 2); 
  20. $leftBegin = $begin; 
  21. $rightBegin = $middle + $s1len; 
  22. $leftEnd = $middle; 
  23. $rightEnd = $end + $s1len; 

  24. //先检查左边
  25. if(ereg($s1, substr($s2, $leftBegin, $rightBegin - $leftBegin))) 
  26. $end = $middle; 
  27. else //(ereg($s1, substr($s2, $leftEnd, $rightEnd - $leftEnd))) 
  28. $position += $middle - $begin; 
  29. $begin = $middle; 

  30. if(ereg($s1, substr($s2, $end, $s1len))) $position++; 

  31. //返回所在的位置
  32. return $position + 1; 
  33. ?>
原创粉丝点击