如何使用PHP的while循环中的值动态替换某些字符串值

时间:2018-02-16 07:52:07

标签: php

目标:替换以下字符串中的名称: - 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;

        }               
        }

2 个答案:

答案 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/YpNhO

此方法还支持其他更高级的操作数而不仅仅是+和 - 。
在这里,我使用() *和平方根。 https://3v4l.org/eapcU