提问人:robsn 提问时间:8/22/2023 最后编辑:ADysonrobsn 更新时间:8/23/2023 访问量:52
使用带有 if 或开关的字符串来替换文本
using a string with an if or switch for replace text
问:
我一直在尝试用带有 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..
答:
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
);
但是,如果您有几个条件要测试,这可能会变得有点不切实际。
从描述中听起来,您可能需要将各种字符串值映射到数值。在这种情况下,您根本不需要条件(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 :-)
评论