Массив после функции array_unique возвращается как объект в ответе JSON

im пытается объединить два массива с отсутствием дублированных значений и вернуть их как JSON с Slim framework. Я выполняю следующий код, но в результате получаю unique свойство JSON как объекта, а не как массив. Я не знаю, почему это происходит, и я хотел бы избежать этого. Как мне это сделать?

Мой код:

 $galleries = array_map(function($element){return $element->path;}, $galleries); $folders = array_filter(glob('../galleries/*'), 'is_dir'); function transformElems($elem){ return substr($elem,3); } $folders = array_map("transformElems", $folders); $merged = array_merge($galleries,$folders); $unique = array_unique($merged); $response = array( 'folders' => $dirs, 'galleries' => $galleries, 'merged' => $merged, 'unique' => $unique); echo json_encode($response); 

Как ответ JSON, я получаю:

 { folders: [] //array galleries: [] //array merged: [] //array unique: {} //object but should be an array } 

http://i.imgur.com/cfHy8Od.png

Кажется, что array_unique возвращает что-то странное, но в чем причина?

Solutions Collecting From Web of "Массив после функции array_unique возвращается как объект в ответе JSON"

array_unique удаляет значения из массива, которые являются дубликатами, но ключи массива сохраняются.

Итак, массив вроде этого:

 array(1,2,2,3) 

будет фильтроваться для этого

 array(1,2,3) 

но значение «3» будет хранить его ключ «3», поэтому результирующий массив действительно

 array(0 => 1, 1 => 2, 3 => 3) 

И json_encode не может кодировать эти значения в массив JSON, потому что ключи не начинаются с нуля без отверстий. Единственный общий способ восстановить этот массив – использовать для него объект JSON.

Если вы хотите всегда выделять массив JSON, вы должны перенумеровать ключи массива. Один из способов – объединить массив с пустым:

 $nonunique = array(1,2,2,3); $unique = array_unique($nonunique); $renumbered = array_merge($unique, array()); json_encode($renumbered); 

Еще один способ добиться этого – позволить array_values ​​создать для вас новый последовательно-индексированный массив:

 $nonunique = array(1,2,2,3); $renumbered = array_values(array_unique($nonunique)); json_encode($renumbered);