2013-04-25 37 views
1

/JSON結合陣列陣列我一直在試圖解決這個問題了兩天沒有成功大半。我想結合/添加到存儲在我的服務器上使用php .json文件的json數組。加入JSON文件PHP

這是什麼,我想結合了短版。

box.json:

[{"date":"25.4.2013 10:40:10"},{"comment":"some text"},{"comment":"some more text"}] 

發佈JSON:

[{"date":"25.4.2013 10:45:15"},{"comment":"another quote"},{"comment":"quote"}] 

這正是我需要的。

[{"date":"25.4.2013 10:40:10"},{"comment":"some text"},{"comment":"some more text"}, 
{"date":"25.4.2013 10:45:15"},{"comment":"another quote"},{"comment":"quote"}] 

這是我得到的。 (內部數組的數組)

[{"date":"25.4.2013 10:40:10"},{"comment":"some text"},{"comment":"some more text"}, 
[{"date":"25.4.2013 10:45:15"},{"comment":"another quote"},{"comment":"quote"}]] 

這是我的代碼:

<?php 
$sentArray = $_POST['json']; 
$boxArray = file_get_contents('ajax/box.json'); 
$sentdata = json_decode($sentArray); 
$getdata = json_decode($boxArray); 
$sentdata[] = $getdata; /* I also tried array_push($sentdata, $getdata); */ 
$json = json_encode($sentdata); 
$fsize = filesize('ajax/box.json'); 
if ($fsize <= 5000){ 
    if (json_encode($json) != null) { /* sanity check */ 
    $file = fopen('ajax/box.json' ,'w+'); 
    fwrite($file, $json); 
    fclose($file); 
}else{ 
    /*rest of code*/ 
} 
?> 

請幫助我的理智開始進來的質疑。

回答

0

取而代之的是:

$sentdata[] = $getdata; /* I also tried array_push($sentdata, $getdata); */ 

嘗試:

$combinedData = array_merge($sentData, $getData); 
$json = json_encode($combinedData); 

使用array_merge你的陣列組合成一個,而不是增加一個陣列作爲值到另一個。

請注意,我改變了你得到的數據的名稱 - 儘量避免使用相同的名稱和大小寫不同的變量,它會使事情變得更容易理解(爲你,爲以後的開發人員支持你的代碼)。

乾杯

+0

我需要添加值,它應該允許重複。你說的對,我的命名實踐很亂。我是一名學習開發的設計師。感謝您的建議。 – unsalted 2013-04-25 19:37:37

+0

尼克,它會允許重複,因爲你使用對象作爲值而不是標量。如果不清楚如何使用它,請告訴我。 – Madbreaks 2013-04-25 19:45:07

+0

我試着跑陣列合併前一段時間,它沒有工作(我一定做錯了什麼),但它看起來你是正確的,它現在的作品。謝謝! – unsalted 2013-04-25 19:53:51

1

這裏是你的問題

$sentdata[] = $getdata; 

使用foreach

foreach($getdata as $value) 
    $sentdata[] = $value; 

UPDATE: 但我認爲你需要這個$sentdata$getdata

foreach($senttdata as $value) 
    $getdata[] = $value; 

然後把$getdata到您的文件。

+0

輝煌!那樣做了! – unsalted 2013-04-25 19:22:27

+0

迭代是不是在這裏最好的答案 - 這取決於數據集,這可能變得非常昂貴的大小。 – Madbreaks 2013-04-25 19:23:37

+0

@Madbreaks是否有任何其他方式?array_merge'到底是做什麼的?只寫一個名字,你的代碼是最好的?這個功能到底是什麼? – Cooper 2013-04-25 19:34:28

1
$box = json_decode(file_get_contents('ajax/box.json')); 
$posted = json_decode($_POST['json']); 
$merge = array_merge ((array)$box,(array)$posted); 

鑄造(陣列)防止錯誤,如果$箱或$貼出成爲空還是假的,這將是一個空數組