Предположим, у вас есть два набора данных, которые вам нужны, чтобы убедиться, что они не изменились. Например, у вас есть массив объектов в одной руке, а другой массив в другой руке. Теперь вам нужно убедиться, что оба массива одинаковы.
Каждый массив может содержать данные любого типа: логические, строки, объекты, массивы, NULL
, так далее.
При сравнении оба содержимого массива должны быть абсолютно одинаковыми. Тот же тип данных и тот же порядок.
Вместо того, чтобы перебирать содержимое массива с кодом, который может сравнивать разные типы данных, и возможными рекурсивными сравнениями, я пришел с решением, которое я был бы признателен, если бы вы смогли пролить свет на то, что есть какие-то недостатки. Язык PHP , но меня больше интересует не зависящий от языка ответ.
Я сериализовал оба набора данных по отдельности и рассчитал их md5
хэши. Я выбрал md5
потому что он доступен без внешних расширений или библиотек и работает довольно быстро. Я знаю о возможности столкновения, и md5
хэши почти не криптографически безопасны.
Мой вопрос таков:
Заранее спасибо.
Если вы ищете изменения в массиве, я бы порекомендовал использовать CRC32 (). подобно MD5 () эта функция доступна в PHP начиная с версии 4 и не требует добавления специальных библиотек. Однако CRC32 () на самом деле предназначен для проверки ошибок и работает быстрее, чем MD5 (), который подразумевается как функция хеширования и, как таковой, медленнее по своей конструкции.
Особенно с точки зрения вашего независимого от языка ответа, я бы всегда выбирал CRC32 () вместо MD5 (), так как поиск библиотек гораздо проще, а вычислительные затраты намного дешевле, что делает его идеальным для практически любого приложения, даже для встроенных устройств.
Других решений пока нет …