假设您有两个数据集,需要确保它们没有更改。例如,一只手拿着一个对象数组,另一只手又拿着另一个数组。现在,您需要验证两个数组是否完全相同。
每个数组可以包含任何类型的数据:布尔值、字符串、对象、数组、NULL
等。
比较两个数组内容时,应该完全相同。相同的数据类型和相同的顺序。
我没有迭代数组内容,使用可以比较不同类型数据的代码,以及可能的递归比较,而是提出了一个解决方案,如果你能说明其中是否有任何缺点,我将不胜感激。PHP是一种语言,但我更感兴趣的是一种与语言无关的答案。
我分别序列化了这两个数据集,并计算了它们的md5
散列。我选择md5
是因为它不需要外部扩展或库,而且工作速度很快。我知道发生冲突的可能性,md5
哈希在加密方面几乎是不安全的。
我的问题是:
- 它是一种广泛使用的方法来验证任意类型的数据吗。检查文件校验和是有意义的,但我个人并没有用它来比较这样的变量
- 我这样做主要是为了保持代码的简单性。比较可能更快,因为每当它首先发现不匹配时,它就会破坏比较。在我的情况下,数据的长度相当小。大约5kb作为一个串行字符串
- 还有其他缺点我应该了解一下吗
提前谢谢。
如果您在数组中寻找更改,我实际上建议您使用CRC32()。与MD5()一样,这个函数从第4版起就可以在PHP中使用,并且不需要添加特殊的库。然而,CRC32()实际上是用于错误检查的,它比MD5()更快,后者是一个哈希函数,因此在设计上更慢。
特别是在你的语言不可知的答案方面,我总是选择CRC32()而不是MD5(),因为它的库查找起来要简单得多,计算成本也要低得多,非常适合几乎所有应用程序,甚至是嵌入式设备。