在数学之前拆分字符串

时间:2013-05-28 14:12:30

标签: php

如果我有一个如下字符串:

$string = 1x2,3x5,6x6,;

每个部分包含例如:

  

1 =金额,x2 =数量。

有没有办法在逗号之间拆分每个段,然后按数量计算金额和次数?

谢谢

2 个答案:

答案 0 :(得分:1)

是的 - 使用explodelist(您可以在没有list的情况下执行此操作,但它可以更轻松地使用它):

$string = "1x2,3x5,6x6";
$total = 0;
$explode = explode(",", $string);
foreach ($explode as $explodeSegment) {
    if (trim($explodeSegment) != "") {
        list($amount, $quantity) = explode("x", $explodeSegment);
        $total += ((int)$amount * (int)$quantity);
    }
}
var_dump($total); //int(53)

DEMO

答案 1 :(得分:0)

你可以使用这样的功能。

function evaluateExpressions($strings){
    $expressions = explode(",", $strings);
    $expressions = array_filter($expressions);
    $matches = array();
    $results = array();
    foreach($expressions as $expression){
          if (preg_match_all("/([0-9]+)([^0-9])([0-9]+)/", $expression, $matches)){
            array_shift($matches);
            print_r($matches);
            $lh = array_shift($matches)[0];
            $op = array_shift($matches)[0];
            $rh = array_shift($matches)[0];

            switch($op){
                case "x":
                    $results[] = $lh * $rh;
                    break;
                case "+":
                    $results[] = $lh + $rh;
                    break;
                case "-":
                    $retults[] = $lh + $rh;
                    break;
                case "/":
                    $results[] = $lh + $rh;
                    break;
                default:
                    throw new Exception("I don't understand how to use ".$op);
            }


          } else {
            throw new Exception("Malformed Expression List");
          }
    }
    return $results;
}

如果将评估2个术语数学表达式的列表并返回结果数组

使用示例:

$strings = "1x2,3x5,6x6,";
$dat = evaluateExpressions($strings);
print_r($dat);

会产生

Array
(
    [0] => 2
    [1] => 15
    [2] => 36
)

作为奖励,它还知道如何使用其他简单的数学运算符(+ - x /)