三部处置室护理费+三部处置室护理治疗费+三部处置室化验费+(三部处置室床日总量+三部处置室入院人数*3+三部处置室出院人数*0.3)   把这上面的汉字先截取出来,我会在数据库中获取对应的费用用,然后在拼装好进行运算。我的处理是把运算符都替换为“,”然后以“,”分割这样的方式处理的。现在就是拼装怎么去拼装。

解决方案 »

  1.   

    $str = '三部处置室护理费+三部处置室护理治疗费+三部处置室化验费+(三部处置室床日总量+三部处置室入院人数*3+三部处置室出院人数*0.3)';
    preg_match_all("|[^0-9*.+()]+|", $str, $matches);
    $ar_txt = array_values($matches[0]);
    $ar_val = array(1,2,3,4,5,6); //中文项目对应的价格数值
    $str = str_replace($ar_txt, $ar_val, $str);
    echo $str; //1+2+3+(4+5*3+6*0.3)
      

  2.   

    preg_match_all("|[^0-9*.+-/()]+|", $str, $matches);
      

  3.   


    $str='三部处置室护理费+三部处置室护理治疗费+三部处置室化验费+(三部处置室床日总量+三部处置室入院人数*3+三部处置室出院人数*0.3)';
    $out=preg_replace_callback('/[^\+\-\*\/\(\)]+/',create_function(
    '$match',
    '
    $field=$match[0];
    $result="[$field]";
    //$result=select price from tbl where name=$field
    return $result;
    '
    ),$str);echo $out;
      

  4.   

    怎么把最后得到的那个string类型的字符串让它计算出随后的数值呢。真心谢谢2位了,帮了个大忙。
      

  5.   

    $str = '三部处置室护理费+三部处置室护理治疗费+三部处置室化验费+(三部处置室床日总量+三部处置室入院人数*3+三部处置室出院人数*0.3)';
    preg_match_all("|[^0-9*.+\-/()]+|", $str, $matches);
    $ar_txt = array_values($matches[0]);
    $ar_val = array(1,2,3,4,5,6); //中文项目对应的价格数值
    $str = str_replace($ar_txt, $ar_val, $str);
    eval("\$result = $str");
    echo $result;
      

  6.   

    试过了,这个函数不行。
    $nsd="1+2+3";  
    eval("\$nsd = \"$nsd\";"); 
    echo $nsd;
    打印出来是:1+2+3
      

  7.   

    $nsd="1+2+3";
    eval("\$nsd = $nsd;");
    echo $nsd;
      

  8.   

    如果上面的$nsd变量里面的运算公式出错。比如说出现++或者--,程序运行到这里的时候就会直接输出报错信息,这个可不可以控制。我有查找资料,还是没有解决这个问题。再麻烦一下你。谢谢了。
      

  9.   

    我想了个办法用issset去判断把为空的改为了0.但是在用isset的时候没办法去捕获为空的。很奇怪