У меня есть простое приложение, которое отправляет запрос в веб-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
Благодаря MarkB и за полезные комментарии. Вот решение.
var_dump показал, что функция array_map работает по желанию и удаляет дубликаты. однако в json, отправленном в приложение, отсутствовали индексные ключи.
изменения
echo json_encode($resultArray);
в
echo json_encode(array_values($resultArray));
исправлена ошибка, и приложение снова запускается без дубликатов в результирующем наборе.
var_dump($tempArray, $resultArray)
чтобы сравнить версии до / после?