当我将变量中的值传递给 JSON 代码时它不起作用但是如果我硬编码它在 PHP 中的值
Posted
技术标签:
【中文标题】当我将变量中的值传递给 JSON 代码时它不起作用但是如果我硬编码它在 PHP 中的值【英文标题】:It is not working when I pass the value from a variable to the JSON code but if I hardcode the value it works in PHP 【发布时间】:2020-11-19 01:01:21 【问题描述】:当我将值从变量传递到 JSON 代码时它不起作用,但如果我硬编码它的值,它会起作用。
我试过的代码:
$countries = 'LK,AU,US';
$allowedCountries = str_getcsv($countries, ",");
$allowedCountries = ('","' . implode('","', $allowedCountries) . '');
var_dump ($allowedCountries);
输出: "","LK","AU","US"
问题是当我将变量的输出传递给下面的 API 代码时,它不起作用。但是如果我在下面的 API 代码中硬编码像 'countrySet' => ["","LK","AU","US"] 这样的相同输出,它就可以工作。
API 代码:
CURLOPT_POSTFIELDS => json_encode([
"ttl" => 300,
'ipGeoRules' => json_encode([
[
'action' => 'true',
'ipSet' => [],
'countrySet' => [$allowedCountries]
]
]),
【问题讨论】:
【参考方案1】:硬编码值:
'countrySet' => ["","LK","AU","US"]
不同于
'countrySet' => [$allowedCountries]
因为$allowedCountries
已经是一个值数组,所以会产生一个嵌套数组:
'countrySet' => [
[
"LK",
"AU",
"US",
]
],
【讨论】:
虽然它不是一个数组。这是一个字符串,因为他们做了$allowedCountries = ('","' . implode('","', $allowedCountries) . '');
【参考方案2】:
您似乎对这里的类型(字符串与数组)有些混淆。从外观上看,您可能只需在 $countries
上使用 explode()
并将该结果传递给您的 countrySet
参数。
CURLOPT_POSTFIELDS => json_encode([
"ttl" => 300,
'ipGeoRules' => json_encode([
[
'action' => 'true',
'ipSet' => [],
'countrySet' => explode(",", $countries)
]
])
该值是一个数组,但由于您使用json_encode()
,它将被编码为一个字符串。
作为脚注,你真的需要使用两次json_encode()
吗?不应该只在整个数组上需要它吗(而不是在外部数组上,以及ipGeoRules
参数上)?
【讨论】:
感谢您的解决方案。我一直在尝试传递方括号内的值,例如“countrySet”=> [$allowedCountries]。当我删除它们并像您一样传递值时,它起作用了。【参考方案3】:那是因为您需要将字符串转换为数组。
试试 echo gettype($allowedCountries) 看看是字符串还是数组。
将国家转换为数组。
【讨论】:
以上是关于当我将变量中的值传递给 JSON 代码时它不起作用但是如果我硬编码它在 PHP 中的值的主要内容,如果未能解决你的问题,请参考以下文章
将DataTable传递给存储过程中的表值参数不起作用[关闭]