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

죄송합니다. 오타되었습니다. 나는 나의 질문을 편집했다. @ Do not Panic – MHH

답변

5

json_encode이 숫자 키가있는 PHP 배열을 JSON 객체가 아닌 JSON 배열로 변환하려면 키가 순차적이어야합니다. (the PHP manual for json_encode.의 예제 # 4 참조)

array_values을 사용하여 코드에서이 작업을 수행 할 수 있습니다.이 작업은 항목 중 하나를 제거한 후 배열의 색인을 다시 만듭니다.

$good_arr2 = json_encode(array_values($good_arr));