2016-12-28 11 views
1

私はtest_bots.jsonから値を設定解除して元に戻そうとしていますが、何らかの形でデータ形式が変更されています。JSON配列がオブジェクトに変換されるのはなぜですか?

test_bots.jsonは、このJSONの配列が含まれています

$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); 
    } 

保存されます出力は次のとおりです:

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

私のコードは次のようになります

{"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

申し訳ありませんが、それはタイプミスでした。私は私の質問を編集しました。 @ Do not Panic – MHH

答えて

5

json_encodeが数値キーを使用してPHP配列をJSONオブジェクトではなくJSON配列に変換するには、キーが連続していなければなりません。あなたはのいずれかの項目を削除した後に、配列のインデックスを再作成しますarray_valuesを使用して、あなたのコード内でこれを達成することができます

を(the PHP manual for json_encode.例#4を参照してください)。

$good_arr2 = json_encode(array_values($good_arr)); 
関連する問題