使用带有 if 或开关的字符串来替换文本

using a string with an if or switch for replace text

提问人:robsn 提问时间:8/22/2023 最后编辑:ADysonrobsn 更新时间:8/23/2023 访问量:52

问:

我一直在尝试用带有 PHP 变量的 if 条件替换 postfields 中的文本值。但是我无法让它工作......

(卷发在环内)

这有效:

    CURLOPT_POSTFIELDS =>'{ 
        "fields": {
            "Mo": 31,
            "DI": 31
        }
}'

第一次尝试没有用:

    CURLOPT_POSTFIELDS =>'{ 
        "fields": {
            "Mo": '.if($_POST['value'][$i] == "sunshine") {
                  31 }.',
            "Di": 31
        }
}'

第二次尝试没有奏效:

CURLOPT_POSTFIELDS =>'{ 
            "fields": {
                "Mo": '.switch ($_POST['value'][$i]) {
                      case "sunshine":
                      31; }.',
                "Di": 31
            }
    }'

在 post 值中是一个名为 sunshine 或 rainy..

php 字符串 if-语句

评论

1赞 ADyson 8/22/2023
仅供参考,“不起作用”在任何时候都不是有用的问题描述。我希望这会给您带来语法错误,但尽管如此,您应该养成告诉我们错误/失败的确切情况的习惯,而不仅仅是期望我们可以立即发现它。

答:

2赞 ADyson 8/22/2023 #1

让我们回过头来一步。首先,不要手动构建 JSON - 那样就会出现错误和语法混乱。json_encode() 的存在是有原因的。

始终根据需要创建一个 PHP 对象/数组,其中包含您需要的数据,然后使用 进行编码,以便始终获得正确的 JSON。json_encode

其次,如果您需要在字符串或其他赋值中执行条件,并连接结果,请使用三元运算符。要么这样做,要么事先执行语句,然后将输出添加到完成的变量中。if

例如:

CURLOPT_POSTFIELDS => array(
    "Mo" => ($_POST['value'][$i] == "sunshine" ? 31 : null),
    "Di" => 31
);

现场演示:https://3v4l.org/IRWQ3


但是,如果您有几个条件要测试,这可能会变得有点不切实际。

从描述中听起来,您可能需要将各种字符串值映射到数值。在这种情况下,您根本不需要条件(if/switch/ternary),只需使用数组作为查找即可。

我不知道确切的要求或数据结构,但也许是这样的:

//lookups
$lookup = array (
    "sunshine" => 31,
    "cloudy" => 29,
    "rainy" => 27
);

CURLOPT_POSTFIELDS => array(
    "Mo" => $lookup[$_POST['value'][$i]],
    "Di" => 31
);

评论

0赞 robsn 8/22/2023
嘿,艾迪森,非常感谢。当我想检查单个值时,您的解决方案有效。但是,当我不仅要检查阳光,还要检查雨天或阴天时,我无法让它工作。因此,我试图用开关解决整个问题。当然,你对JSON是绝对正确的。谢谢你的提示!
0赞 ADyson 8/23/2023
@robsn 那么,你到底做了什么,出了什么问题?你可以嵌套三元运算符,但如果你有一个或两个以上的运算符,它确实会变得有点混乱。不过,我已经编辑了这个问题,向您展示了另一种可能的方法。
0赞 robsn 8/23/2023
感谢您的帮助!我刚刚看到我没有添加我通过 $_POST 从期权价值表单中获取数据。 对不起:-/根据表单中选择的内容,我必须将一个值传递给 API。日照 = 31 雨 = 32 多云 = 33 这就是我尝试使用 if 或开关的原因
0赞 ADyson 8/23/2023
还行。好吧,这就是为什么我向您展示了查找技术的原因......它可以为您做到这一点,而无需任何 if 或 switch。请看我上一个例子。
1赞 robsn 8/23/2023
完美工作!谢谢!我只在最后添加了一个 null => 0 :-)