PHP解析字段并计算差异

时间:2014-06-06 14:21:37

标签: php evaluate

有人可以提供一种方法来解析具有如下格式的字段,并在冒号之间取两个值之间的区别。

bot1:11874-12227:top

例如,结果字段将等于12227-11874 = 353.

我认为类似于分隔符扫描,然后评估差异的负面影响。

2 个答案:

答案 0 :(得分:1)

$string = "bot1:11874-12227:top";
$parts = explode(":", $string);
$numbers = explode("-", $parts[1]);
$difference = (($numbers[1] - $numbers[0]) > 0) ? $numbers[1] - $numbers[0] : $numbers[0] - $numbers[1];

echo $difference;

答案 1 :(得分:0)

只需使用preg_match的正则表达式:

$string = 'bot1:11874-12227:top';

preg_match("#[A-Za-z]+[0-9]?:([0-9]+)([-|+|*|//])([0-9]+):[A-Za-z]+#", $string, $matches);

echo '<pre>';
print_r($matches);
echo '</pre>';

结果将是:

Array
(
    [0] => bot1:11874-12227:top
    [1] => 11874
    [2] => -
    [3] => 12227
)

然后只需执行以下操作即可:

echo abs($matches[1] - $matches[3]);

现在,请注意$matches[2]如何匹配数学运算符?好吧,为什么不利用create_function来执行以下操作:

$string_to_math_results = create_function("", "return ($matches[1] $matches[2] $matches[3]);" );

echo abs($string_to_math_results());

所以像这样把它们一起带来。现在,您不仅可以解析字符串中的值,还可以根据字符串中的值执行基本计算:

$string = 'bot1:11874-12227:top';

preg_match("#[A-Za-z]+[0-9]?:([0-9]+)([-|+|*|//])([0-9]+):[A-Za-z]+#", $string, $matches);

$string_to_math_results = create_function("", "return ($matches[1] - $matches[3]);" );

echo abs($string_to_math_results());