2016-12-28 4 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

Изменить '$ good_arr' в' file_put_contents' на '$ good_arr2'. – jardis

+0

Похоже, только опечатка. Как отметил @jardis, вы не сохраняете переменную, которую вы только что создали с помощью 'json_encode', в файл, вы сохраняете некодированный массив. –

+0

Извините, что это была опечатка. Я редактировал свой вопрос. @ Do not Panic – MHH

ответ

5

Для преобразования json_encode для преобразования массива PHP с числовыми ключами в массив JSON, а не объект JSON, ключи должны быть последовательными. (См. Пример № 4 в the PHP manual for json_encode.)

Вы можете выполнить это в своем коде с помощью array_values, который будет переинсталлировать массив после удаления одного из элементов.

$good_arr2 = json_encode(array_values($good_arr)); 
Смежные вопросы