2016-08-04 68 views
0

我想通過$ POST發送數據,並且具有通過並推入陣列中的數據,然後寫回JSON文件。我的問題是在數組推進中,我想我需要一個foreach來超出array_push,這樣當jsondata被寫入文件,然後在下一個$ POST被髮送時重新導入該文件,它將全部嵌套在相同的json字典。但正如你可以從我的check.json文件中看到的,我沒有任何運氣。在此先感謝...如何在同一個數組中嵌套JSON數據,然後再次對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"}] 
+1

推陣列到陣列而不是要合併。 – Rizier123

+1

它是一個使用編號鍵的粘性檢票,這意味着什麼,像array_merge這樣的東西會重新編號,如果他們不是字符串。array_merge ::'使用數字鍵輸入數組中的值將使用結果數組中從零開始的遞增鍵重新編號。 ' – ArtisticPhoenix

+1

只需將它添加到現有數組'$ tempArray [$ code] = $ cpu'中,獲取嵌套數組的原因是因爲您正在將數組推到末尾或其他數組''tempArray' – ArtisticPhoenix

回答

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

我要小心數組合並和像這樣的''array($ code => $ cpu)''''array(321 =>「jake」)' – ArtisticPhoenix

+1

@ArtisiticPhoenix:好。 – AbraCadaver

+0

ahh看起來像在工作,感謝您的幫助! –

1

我希望這可以幫助,但要追加一個項目一個數組什麼時候你正在尋找的是添加一個屬性到一個對象。

在「你想JSON」,則顯示出與一個對象的陣列具有兩個屬性,321和88這兩個屬性分別「托馬斯」具有值「傑克」和。

所以,你可以只改變一個行:

array_push($tempArray, $formdata); 

它增加了一個項目的陣列,以類似

$tempArray->$code = $cpu; 

甚至

$tempArray[$code] = $cpu; 

只是追加財產和價值的現有對象。

這允許你刪除:

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

感謝, 韋恩