打印

[php] 计算字符串的值

$num="10+15+2+9+4+6+20";//这个字符串是从其他地方整理得到的;有没有哪个函数可以直接计算出这个相加后的值;或者有什么比较方便的方法
运算后得到的结果应该是66
我现在想到的方法太笨了;先切开;再加
还没想好;先不签了
复制内容到剪贴板
代码:
<?php
$num="10+15+2+9+4+6+20";
eval('$sum='.$num.';');
echo $sum;
?>
以为只有JS有这个函数;没想到php也有;谢谢LS
还没想好;先不签了
顺便问一个正则
我取出来的字符串并不全是标准的+后面是数字;如取出来的有20+5+RR+++ +34++5
我现在希望把其中的无效字符剔除;变成20+5+34+5
该怎样定义这个正则呢
str_replace("正则",'+',$num);
还没想好;先不签了

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!
LZ的字符串里会不会出现
A3c 或者5TTB这种字符呢
xhtml/css/Ajax/AS/php/mysql你才是程序员,你家全是程序员 -__-

TOP

我随便写了个
<?php
       $num='1+2+3++++4+aaa+5+b+q12+123s+A3B';
       $num=ereg_replace('[a-zA-Z]*','',$num);
       $num=ereg_replace('\+{2,}','+',$num);
       echo $num;
?>

我也不是很熟悉正则 不知道对不对
这个表达式最后会变成1+2+3+4+5+12+123+3
xhtml/css/Ajax/AS/php/mysql你才是程序员,你家全是程序员 -__-

TOP

谢谢先;基本上差不多了
现在还有两个问题:
1。用正则把最后的+和开始的+去掉;因为这两个也是无效的。如:+1+2+3+4+5+12+123+3+
2。#2用到的eval函数怎么只在IE7正常;在IE6和FF中都报错:
错误如下:
Parse error: syntax error, unexpected ';' in c:\www\Working.php(137) : eval()'d code on line 1
不懂啊;
复制内容到剪贴板
代码:
<?php
$num="10+15+2+9+4+6+20";
eval('$sum='.$num.';');
echo $sum;
?>
-_!! -_!! -_!! -_!! -_!!
还没想好;先不签了

TOP

不好意思;第二条的错误原因找到了;是没有传值就会出错
还没想好;先不签了

TOP

搞定
$num=ereg_replace('^\+|\+$|[a-zA-Z ]*','',$num);
还没想好;先不签了

TOP

<?php
       $num='+1+2+3++++4+aaa+5+b+q12+123s+A3B+++';
       $num=ereg_replace('[a-zA-Z]*|^\+*|\+*$','',$num);
       $num=ereg_replace('\+{2,}','+',$num);
       echo $num;
?>

xhtml/css/Ajax/AS/php/mysql你才是程序员,你家全是程序员 -__-

TOP

为了写这个正则搞得我把手册中的正则部分从头到尾读了一遍;现在似咐比较清楚了;就是不知道下次比较复杂的能不能写好;呵呵
我后来正式用的代码和楼上一样(那时候你还没贴;呵呵);看来是有进步了;开心下
还没想好;先不签了

TOP

preg_replace更快建议使用!

TOP

谢谢LS提醒;我Baidu了一下
preg_replace与ereg_replace那个效率更高

  编程序,总有一种感觉,去年的程序,到了今年,总感觉慢了好多,应该这就是优化所在吧,自己的知识更深了,技术也在更新,所以每过一段时间,再读读您写的程序,看有没有可以优化的地方,这是一个程序员应该做的行动。preg_replace()是Perl内置的一种文字匹配模式,不过用起来一些参数会比ereg_relace()复杂一些,实际的项目运用中,用ereg的人还是不少,近日我写了一个获取HTML中的文本的函数,发现 preg_replace()居然比ereg_replace()快了近一倍,两个函数如下:

用preg_replace()

function GetHtmlText($str)
{
$str = preg_replace("/<sty(.*)\/style>|<scr(.*)\/script>|<!--(.*)-->/isU","",$str);
  $alltext = "";
  $start = 1;
  for($i=0;$i<strlen($str);$i++){
    if($start==0 && $str[$i]==">") $start = 1;
    else if($start==1){
     if($str[$i]=="<"){ $start = 0; $alltext .= " "; }
     else if(ord($str[$i])>32) $alltext .= $str[$i];
    }
  }
  $alltext = preg_replace("/&([^;&]*)(;|&)/"," ",$alltext);
  $alltext = preg_replace("/ {1,}/"," ",$alltext);
  $alltext = preg_replace("/ {1,}/"," ",$alltext);
  return $alltext;
}

用ereg_replace()

function GetHtmlText($str)
{
$str = eregi_replace("<sty(.*)/style>|<scr(.*)/script>|<!--(.*)-->","",$str);
  $alltext = "";
  $start = 1;
  for($i=0;$i<strlen($str);$i++){
    if($start==0 && $str[$i]==">") $start = 1;
    else if($start==1){
     if($str[$i]=="<"){ $start = 0; $alltext .= " "; }
     else if(ord($str[$i])>32) $alltext .= $str[$i];
    }
  }
  $alltext = ereg_replace("&([^;&]*)(;|&)"," ",$alltext);
  $alltext = ereg_replace(" {1,}"," ",$alltext);
  $alltext = ereg_replace(" {1,}"," ",$alltext);
  return $alltext;
}

  经过多次测试对比,用preg_replace()的函数普遍在 0.08-0.12秒之间,用ereg_replace()的函数却去到0.35-0.38秒之间,测试的网页为百度的主页,我的系统是图拉丁 1.1G的CPU,384M的内存。

  如果你的程序中还有使用ereg处理较长文本的,建议马上更改过来。
还没想好;先不签了

TOP