目标:替换以下字符串中的名称: - Jack,+,Sarah, - ,使用mysql表中的整数值绘制,同时循环获取: - 100 + 20-30 然后使用该字符串计算结果: - 90
我怀疑我需要使用变量变量,但我对如何实现它感到困惑。任何指针都会受到赞赏。
我目前拥有的内容:(我没有包含完整的代码,因为变量输出被正确回显所以只发布了相关部分)
... while ($row=mysqli_fetch_assoc($result3)){
$virtualfunction = $row['virtualfunction'];
$meterdisplayname = $row['meterdisplayname'];
$frag = explode(",", $virtualfunction);
for($i = 0; $i < count($frag); $i++){
echo "Fragment $i = $frag[$i] <br />";
$sql4 = "SELECT lastusage FROM rm_meters
WHERE (meterdisplayname = '$frag[$i]')
AND metertype <>'Virtual' ";
$database->setQuery($sql4);
$result4 = $database->query($sql4);
$database->close();
while ($row=mysqli_fetch_assoc($result4)){
$lastusage = $row['lastusage'];
if (($frag[$i] == "+")||($frag[$i] == "-")){
$operator = $frag;
}
// $total = // -- Not sure how to build this -- //
}
echo $total;
}
}
答案 0 :(得分:0)
我从等式中遗漏了MySQL,只关注字符串处理和计算部分。我希望这是你想要实现的目标:
$input = "-,Jack,+,Sarah,-,Drew";
$replacements = [
"Jack" => 100,
"Sarah" => 20,
"Drew" => 30
];
$inputParts = explode(",", $input);
$result = 0;
for ($i = 0; $i < count($inputParts); $i += 2) {
if ($inputParts[$i] == '-') {
$result -= $replacements[$inputParts[$i + 1]];
} else {
$result += $replacements[$inputParts[$i + 1]];
}
}
print($result);
答案 1 :(得分:0)
您可以使用替换数组来查找名称并将其替换为关联名称。
$str ="Jack,+,Sarah,-,Drew";
$repl = ['Jack' => 100, 'Sarah' => 20, 'Drew' => 30];
$res="";
Foreach(explode(",", $str) as $val){
// Replace if val is in replace array else just add Val to result string
$res .= (isset($repl[$val]) ? $repl[$val] : $val);
}
// $res is now "100+20-30"
$res= eval('return '.$res.';'); // calculate the math string
Echo $res;
此方法还支持其他更高级的操作数而不仅仅是+和 - 。
在这里,我使用() *
和平方根。 https://3v4l.org/eapcU