техника array_map и array_unique, приводящая к повреждению данных json в приложении

0

У меня есть простое приложение, которое отправляет запрос в веб-db и возвращает набор результатов. Приложение работало нормально, пока я не добавил строку кода для защиты от дубликатов в многомерном массиве до формирования ответа json. Единственный код, который я изменил, находится в файле php на сервере, а не в приложении.

Вот код, который работает отлично, приложение не вызывает сбоев или ошибок:

while($row = $result->fetch_object())
{
    array_push($resultArray, $row);
}
echo json_encode($resultArray);

и вот как я его изменил

while($row = $result->fetch_object())
{
    array_push($tempArray, $row);
}
// remove any duplicates
$resultArray = array_map("unserialize", array_unique(array_map("serialize", $tempArray)));
echo json_encode($resultArray);

этот PHP-код без проблем удаляет дубликаты из многомерного массива в тестовом php файле. почему это развращает мой json и сбой приложения? Есть ли лучший способ удалить повторяющиеся записи из многомерного массива?

вот текст ошибки в отладчике xcode

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary objectAtIndex:]: unrecognized selector sent to instance 
  • 1
    сделал какую-либо базовую отладку, такую как var_dump($tempArray, $resultArray) чтобы сравнить версии до / после?
  • 0
    код, который вы показали, не создает многомерный массив. это будет массив объектов ?!
Показать ещё 2 комментария
Теги:
multidimensional-array
xcode

1 ответ

0

Благодаря MarkB и за полезные комментарии. Вот решение.

var_dump показал, что функция array_map работает по желанию и удаляет дубликаты. однако в json, отправленном в приложение, отсутствовали индексные ключи.

изменения

echo json_encode($resultArray);

в

echo json_encode(array_values($resultArray));

исправлена ошибка, и приложение снова запускается без дубликатов в результирующем наборе.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню