php 计算字符串值:“2+4+3-12+3-5”
php calculate string values: "2+4+3-12+3-5"
如何计算包含以下数字和 (+/-) 运算符的字符串中的值:
喜欢代码
$string = "3+5+3-7+4-3-1";
//result should be = 4
更新:
我正在尝试计算 $array = [1, +, 6, -, 43, +, 10];
我已经转换成字符串:implode("", $array);
$arr_val = array(1, '+', 6, '-', 43, '+', 10);
$total = 0;
if(isset($arr_val[0]) && ($arr_val[0] != '+' || $arr_val[0] != '-'))
$total = intval($arr_val[0]);
foreach($arr_val AS $key => $val) {
if($val == '+') {
if(isset($arr_val[$key+1]) && ($arr_val[$key+1] != '+' || $arr_val[$key+1] != '-')) {
$total = $total + intval($arr_val[$key+1]);
}
} else if($val == '-') {
if(isset($arr_val[$key+1]) && ($arr_val[$key+1] != '+' || $arr_val[$key+1] != '-')) {
$total = $total - intval($arr_val[$key+1]);
}
}
}
echo $total;
也许它会解决您的问题。
你可以使用eval
$string = "3+5+3-7+4-3-1";
eval( '$res = (' . $string . ');' );
echo $res;
对于任何类型的数组,如:[1, + , 4, -, 5, , 3, 8, + , 6]
使用自定义 php 辅助函数解决:
function calcArray($arrVal)
{
if (count($arrVal) == 1) {
return reset($arrVal);
}
if (is_int($arrVal[1])) {
$arrVal[0] = $arrVal[0].$arrVal[1];
unset($arrVal[1]);
return calcArray(array_values($arrVal));
}
$emptyValKey = array_search('', $arrVal);
if ($emptyValKey) {
$concatVal = $arrVal[$emptyValKey-1].$arrVal[$emptyValKey+1];
unset($arrVal[$emptyValKey+1]);
unset($arrVal[$emptyValKey]);
$arrVal[$emptyValKey-1] = $concatVal;
return calcArray(array_values($arrVal));
}
$total = $arrVal[1] == "+" ? $arrVal[0] + $arrVal[2]:$arrVal[0] - $arrVal[2];
unset($arrVal[0]);
unset($arrVal[1]);
unset($arrVal[2]);
array_unshift($arrVal, $total);
$arrVal = array_values(array_filter($arrVal));
return calcArray($arrVal);
}
如何计算包含以下数字和 (+/-) 运算符的字符串中的值:
喜欢代码
$string = "3+5+3-7+4-3-1";
//result should be = 4
更新: 我正在尝试计算 $array = [1, +, 6, -, 43, +, 10];
我已经转换成字符串:implode("", $array);
$arr_val = array(1, '+', 6, '-', 43, '+', 10);
$total = 0;
if(isset($arr_val[0]) && ($arr_val[0] != '+' || $arr_val[0] != '-'))
$total = intval($arr_val[0]);
foreach($arr_val AS $key => $val) {
if($val == '+') {
if(isset($arr_val[$key+1]) && ($arr_val[$key+1] != '+' || $arr_val[$key+1] != '-')) {
$total = $total + intval($arr_val[$key+1]);
}
} else if($val == '-') {
if(isset($arr_val[$key+1]) && ($arr_val[$key+1] != '+' || $arr_val[$key+1] != '-')) {
$total = $total - intval($arr_val[$key+1]);
}
}
}
echo $total;
也许它会解决您的问题。
你可以使用eval
$string = "3+5+3-7+4-3-1";
eval( '$res = (' . $string . ');' );
echo $res;
对于任何类型的数组,如:[1, + , 4, -, 5, , 3, 8, + , 6]
使用自定义 php 辅助函数解决:
function calcArray($arrVal)
{
if (count($arrVal) == 1) {
return reset($arrVal);
}
if (is_int($arrVal[1])) {
$arrVal[0] = $arrVal[0].$arrVal[1];
unset($arrVal[1]);
return calcArray(array_values($arrVal));
}
$emptyValKey = array_search('', $arrVal);
if ($emptyValKey) {
$concatVal = $arrVal[$emptyValKey-1].$arrVal[$emptyValKey+1];
unset($arrVal[$emptyValKey+1]);
unset($arrVal[$emptyValKey]);
$arrVal[$emptyValKey-1] = $concatVal;
return calcArray(array_values($arrVal));
}
$total = $arrVal[1] == "+" ? $arrVal[0] + $arrVal[2]:$arrVal[0] - $arrVal[2];
unset($arrVal[0]);
unset($arrVal[1]);
unset($arrVal[2]);
array_unshift($arrVal, $total);
$arrVal = array_values(array_filter($arrVal));
return calcArray($arrVal);
}