手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆

一小段代码

首页 > PHP >

群内突然有人【桔子】提问:

PHP代码
  1. $str = '0001';//这个数有可能是'001020'……请问怎么取到前导有多少个'0'?('0001'结果为3,'001020'结果为2)  

然后自问自答,说这些是他同事写的:

PHP代码
  1. //算法1  
  2. $str = '001020';  
  3. echo strlen(str_replace((int)$str''$str));  
  4.   
  5. //算法2  
  6. $text = '0001';  
  7. $zero = strlen($text) - strlen(ltrim($text'0'));  
  8. return $zero;  

然后说了他自己写的:

PHP代码
  1. $string = '000 012012';  
  2. $string = str_replace(' '''$string);  
  3. $length = strlen($string);  
  4.   
  5. $x = 0;  
  6. for ($i = 0; $i < $length$i++)  
  7. {  
  8. $currentStr = $string{$i};  
  9. if ($currentStr != 0)  
  10. {  
  11. break;  
  12. }  
  13. $x++;  
  14. }  
  15. echo $x;  

 

最后我也写了两个,一个正则,一个是利用现有函数:

 

PHP代码
  1. $str = '00 0 000100002000';  
  2. preg_match( "/^0{0,}/"str_replace" """$str ), $out );  
  3. echo$out[0] );  
  4.   
  5. $str = '00 0 000100002000';  
  6. $tt = str_word_count(str_replace" """$str ),1,'0');  
  7. echo$tt[0] );  

之所以要用str_replace,也是因为桔子说的,以防当中有空格。但事实上,如果出这种题目,应该是不会有空格的吧?

 

哈哈完事。。。




本站采用创作共享版权协议, 要求署名、非商业和保持一致. 本站欢迎任何非商业应用的转载, 但须注明出自"易栈网-膘叔", 保留原始链接, 此外还必须标注原文标题和链接.

« 上一篇 | 下一篇 »

4条记录访客评论

最简单的还是 算法2
如果有空格,把空格加到ltrim的第二个参数不就行了  
# $text = '00 01';  
# $zero = strlen($text) - strlen(ltrim($text, "0 \t\n\r\0\x0B"));  
# return $zero;

Post by 阿债 on 2010, April 16, 9:26 AM 引用此文发表评论 #1

果然算是抛砖引玉了。

(strrpos($str, '0') + 1); 这个,主要是担心 0可能在任何位置都有,但只取前导0.。。

echo strlen($str) - strlen( sprintf ("%d", $str) ); ,如果转为d的话,数字太长会出错。而且可能前导0会消失 。

Post by gouki on 2009, November 25, 12:26 PM 引用此文发表评论 #2

这个也不错吧
[code]
<?php
$str = "00 00 0000 1240";
$str = str_replace(' ' , '', $str);
echo strlen($str) - strlen( sprintf ("%d", $str) );
?>
[/code]

Post by deeka on 2009, November 25, 12:09 PM 引用此文发表评论 #3

<?php
$str = "00 00 0000 124";
$str = str_replace(" ", '', $str);
echo $total = (strrpos($str, '0') + 1);
?>

Post by deeka on 2009, November 25, 12:02 PM 引用此文发表评论 #4


发表评论

评论内容 (必填):