Php 比较混合类型以建立数组中的规范顺序
这是一个好方法吗?如果不是,您推荐什么? 只要顺序是一致的,就不相关。我也知道这些值是不相等的Php 比较混合类型以建立数组中的规范顺序,php,arrays,Php,Arrays,这是一个好方法吗?如果不是,您推荐什么? 只要顺序是一致的,就不相关。我也知道这些值是不相等的 //We cannot know what types of data will be found here except that it is not a resource. $element_array = [ $any_type_but_resource1, $any_type_but_resource2, $any_type_but_resource3, $any_ty
//We cannot know what types of data will be found here except that it is not a resource.
$element_array = [
$any_type_but_resource1,
$any_type_but_resource2,
$any_type_but_resource3,
$any_type_but_resource4,
$any_type_but_resource5,
$any_type_but_resource6
]
我的初始解决方案是:序列化值并使用strcmp(),但确保永远不能返回0
usort($element_array, static function($a, $b){
return strcmp(serialize($a), serialize($b));
);
您可以在这里看到,我的sort有效,而sort()无效。是否有人有理由怀疑这并不总是有效?仅使用
sort()
有任何问题?sha1()
要求传递的参数为字符串(或可以自动转换为字符串的内容),因此这将不适用于未实现\uu toString()
的数组或对象。如果这有帮助的话:。除非我误解了这个问题,sort
在这种情况下不起作用。另外,我也不知道为什么需要测试0并返回1。如果您事先知道值会不同,那么比较它们的序列化无论如何都不会返回0,对吗?您的If($result==0){return 1;}
代码可能会导致usort
失败,因为在其操作过程中,它很可能会多次使用相同的值调用排序函数,但有时作为$a,$b
,有时作为$b,$a
。添加该代码将为相同的值提供不一致的结果。只要sort()
有问题吗?sha1()
要求传递的参数为字符串(或可以自动转换为字符串的内容),因此这将不适用于未实现\u toString()
的数组或对象。如果有帮助的话:。除非我误解了这个问题,sort
在这种情况下不起作用。另外,我也不知道为什么需要测试0并返回1。如果您事先知道值会不同,那么比较它们的序列化无论如何都不会返回0,对吗?您的If($result==0){return 1;}
代码可能会导致usort
失败,因为在其操作过程中,它很可能会多次使用相同的值调用排序函数,但有时作为$a,$b
,有时作为$b,$a
。添加该代码将为相同的值提供不一致的结果。