JSON encode_decode怪异的表现PHP

时间:2017-12-26 18:18:02

标签: php mysql json

我在HTML表单中有数组输入,如下所示

<select name="age[]" id="ageFrom">..Age Options..</select>
<select name="age[]" id="ageTo">..Age Options..</select>

提交后,我将数据保存在mysql数据库中,作为 json_encoded 值,如["20","25"]

foreach($request->request as $key => $value) {
  ProfileSettings::create([
    'uid' => $curMID,
    'code' => 'preference',
    'key' => $key,
    'value' => json_encode($value),
    'serialized' => 1
  ]);
});

现在,当它从DB获取此值并尝试将其解码为

$val = json_decode(["20", "25"]) OR json_decode(["20", "25"], true)

我的数据库返回的值如

enter image description here

然后我收到类似

的错误
  

htmlspecialchars()期望参数1为字符串,给定数组为

请帮助我以$val[0]$val[1]

获得20和25

2 个答案:

答案 0 :(得分:0)

事实是,你在php数组json_decode上调用[ ]

它需要一个字符串,它将转换为数组。

也许您想要使用json_encode代替?如果是这样,请将您的代码更改为:

$val = json_encode(["20", "25"]) OR json_encode(["20", "25"], true)

答案 1 :(得分:0)

问题是来自数据库的值是@Bean public Step messagesDigestMailingStep(EntityManagerFactory entityManagerFactory) { return stepBuilderFactory .get("messagesDigestMailingStep") .<UserAccount, UserAccount>chunk(5) ... .writer(itemWriter) .listener((StepExecutionListener) mailSkipListener) // <--- 1 .listener((SkipListener) mailSkipListener) // <--- 2 .build(); } ,并且在{{1}}函数中插入的值被解释为数组。

要解决此问题,请在双引号之间插入值。

{{1}}