2013-12-08 66 views
4

我想通過一些json文件循環,並將它們合併成一個json文件。我的計劃是建立一個全球性的數組,並將新的候選人合併到他們中。php將json數組合併成一個數組

<?php 
$allData = array(); 
$count = 0; 
if ($handle = opendir('./json/')) { 
    while (false !== ($entry = readdir($handle))) { 
     if ($entry != "." && $entry != "..") { 

      echo $entry."<br />"; 

      $source_file = file_get_contents('./json/'.$entry); 

      $data = json_decode($source_file,TRUE); 

      if($data != null){ 


       $allData = array_merge($allData,$data); 
       echo "<br /><br /><br /><br /> !!!! <br /><br /><br /><br />"; 
       print_r($allData); 

      } 
      else{ 
       echo "Invalid Json File"; 
      } //end else    
     } 
closedir($handle); 
} 

echo "<br /><br /><br /><br /> !!!! <br /><br /><br /><br />"; 

print_r($allData); 

但是,合併覆蓋文件。我怎樣才能將多個json文件合併爲一個?

我想以下結果:

1.json:

{"date":"10"},{"comment":"some comment"},{"user":"john"} 

2.json:

{"date":"11"},{"comment":"another quote"},{"comment":"jim"} 

combined.json

[{"date":"10"},{"comment":"some comment"},{"user":"john"}, 
{"date":"11"},{"comment":"another quote"},{"comment":"jim"}] 

我只獲得這些值之後我合併了數組。

[{"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"}]] 
+0

你試過用array_merge()和json_decode()編輯的數據嗎? – PKeidel

回答

8

您的合併是奇數:

$result = array_merge($allData,$data); 

你想成爲合併每個新$data陣列到越來越$allData陣吧?我認爲你想這樣做:

$allData = array_merge($allData,$data); 

你也可以擺脫這一點,這是沒有必要的。

if($count == 0){ 
    $allData = $data; 
} 
+0

我有邏輯,所以我不覆蓋它。 $ allData已經在上面聲明瞭。 – nook

+0

@ publ1c_stat1c查看我的更新回答。我認爲'$ result'會讓事情變得複雜,而且你不需要它。將'$ data'與'$ allData'合併,並在循環中每次將其設置爲新的'$ allData'。 – jszobody

+0

我追求這一點,我仍然沒有得到理想的結果。它仍然被覆蓋。 – nook

2

如前所述,$result = array_merge($allData,$data);是合併數組的最佳方法。這段代碼用於合併這兩個,但是,問題在於我的json沒有正確構建。

我沒有[]圍繞我的兩個文件,所以他們不能合併。

相關問題