2016-12-28 53 views
1

我試圖從test_bots.json中取消設置值並將其保存回來,但不知何故數據格式正在被更改。爲什麼我的JSON數組變成了一個對象?

test_bots.json包含此JSON數組:

["John","Vladimir","Toni","Joshua","Jessica"] 

我的代碼如下所示:

$good = 'Toni'; 
$good_arr = file_get_contents('test_bots.json'); 
$good_arr = json_decode($good_arr); 

if(in_array($good, $good_arr)){ 
     $key = array_search($good, $good_arr); 
     unset($good_arr[$key]); 

     $good_arr2 = json_encode($good_arr); 
     file_put_contents('test_bots.json',$good_arr2); 
    } 

中保存的輸出是:

{"0":"John","1":"Vladimir","3":"Joshua","4":"Jessica"} 

,但我想要的輸出看起來像:

["John","Vladimir","Joshua","Jessica"] 

我試圖在保存數組之前反序列化數組,但它不起作用。

這是怎麼發生的?

+0

將'file_put_contents'中的'$ good_arr'更改爲'$ good_arr2'。 – jardis

+0

看起來只是一個錯字。正如@jardis指出的那樣,你並沒有將剛剛用'json_encode'創建的變量保存到文件中,而是保存了非編碼數組。 –

+0

對不起,這是錯字。我編輯了我的問題。 @不要恐慌 – MHH

回答

5

爲了使json_encode將具有數字鍵的PHP數組轉換爲JSON數組而不是JSON對象,鍵必須是順序的。 (請參見the PHP manual for json_encode.中的示例#4)

您可以使用array_values在代碼中完成此操作,該操作將在您刪除其中一個項目後重新對數組進行重新索引。

$good_arr2 = json_encode(array_values($good_arr)); 
相關問題