如何在同一个数组中嵌套JSON数据然后再次进行json编码?

时间:2016-08-04 19:42:29

标签: php arrays json

我尝试通过$ POST发送数据,并将数据传递并推送到数组中,然后写回json文件。我的问题是在数组推送中出现,我想我需要一个foreach来超越array_push,这样当jsondata被写入文件时,然后在发送下一个$ POST时重新导入该文件,它将全部成为嵌套在同一个json dict下。但是你可以从我的check.json文件中看到,我没有运气。提前谢谢......

test11.php

<?php
$code = $_POST['code'];

$cpu = $_POST['cpu'];

$formdata = array($code=> $cpu);

$inp = file_get_contents('results.json');
$tempArray = json_decode($inp, true);
array_push($tempArray, $formdata);
$jsonData = json_encode($tempArray);
file_put_contents('results.json', $jsonData);
echo "This is the formdata = $formdata";
echo "This is the inp = $inp";
echo "This is the jsonData = $jsonData ";

?>

t11.html

<form action="test11.php" method="POST">
CPU Name:<br>
<input type="text" name="cpu">
<br><br/>
Code:<br>
<input type="text" name="code">
<br><br>
<input type="submit" value="Submit">
</form>

check.json

{}

当我运行它时,返回的结果不在同一个JSON DICT中。

Check.json的输出

[{"321":"jake"},{"88":"thomas"}]

我希望它看起来像这样:

[{321:"jake",88:"thomas"}]

2 个答案:

答案 0 :(得分:2)

使用+加入表单数据数组和已解码的JSON数组:

$tempArray = $tempArray + $formdata;
$jsonData  = json_encode($tempArray);

或者只需添加新密钥:

$tempArray[$code] = $cpu;
$jsonData  = json_encode($tempArray);

或者我认为另一个答案是试图建议,使用一个对象:

$tempObj = json_decode($inp);
$tempObj->$code = $cpu;
$jsonData = json_encode($tempObj);

答案 1 :(得分:1)

我希望这会有所帮助,但是当你想要做的是向对象添加属性时,你会将一个项目附加到数组中。

在“你想要的JSON”中,你显示一个带有一个对象的数组,它有两个属性,321和88.这两个属性的值分别为“jake”和“thomas”。

所以你只能换一行:

array_push($tempArray, $formdata);

将项添加到数组中,类似于

$tempArray->$code = $cpu;

甚至

$tempArray[$code] = $cpu;

只是将属性和值附加到现有对象。

允许您删除:

$formdata = array($code=> $cpu);

谢谢, 韦恩