我正在编写一个库例程,其中包括对嵌套数组进行一些相当复杂的排序。
我从文档中看到,所有数组排序函数(包括使用内置比较器的函数)都可以在失败时返回false - 但是什么时候会出现这种情况?
答案 0 :(得分:10)
当你发送给函数的变量是 NOT 一个数组时,它会失败 例如:
asort('Hello');//fails
asort(array(1,2,35,7,2,8,3));//true
答案 1 :(得分:2)
当提供的参数不是数组(或者甚至只是一个空数组)时。
答案 2 :(得分:2)
我也偶然发现了这个问题,并做了一些研究,如果还有其他条件,当排序返回false时。查看代码中显示的this sort函数
PHP_FUNCTION(sort)
{
zval *array;
zend_long sort_type = PHP_SORT_REGULAR;
compare_func_t cmp;
ZEND_PARSE_PARAMETERS_START(1, 2)
Z_PARAM_ARRAY_EX(array, 0, 1)
Z_PARAM_OPTIONAL
Z_PARAM_LONG(sort_type)
ZEND_PARSE_PARAMETERS_END_EX(RETURN_FALSE);
cmp = php_get_data_compare_func(sort_type, 0);
if (zend_hash_sort(Z_ARRVAL_P(array), cmp, 1) == FAILURE) {
RETURN_FALSE;
}
RETURN_TRUE;
}
在第一个视图上,您看到,如果false
失败,则排序功能仅返回zend_hash_sort
。 zend_hash_sort
是一个宏,它实际上调用zend_hash_sort_ex
。此函数健壮可靠,即使在传递带有完全不可比较元素的数组时,它也会在all cases中返回SUCCESS。
这使我们回到sort函数,该函数使用宏进行一些参数检查并具有三个规则。
该函数至少需要一个参数,最多要有2个参数。
第一个参数必须是数组
第二个参数(如果给定)必须为长
因此,如果这三个规则之一被破坏,sort
仅返回false
。
$a = false;
sort($a); // fails because of rule 2
$a = [];
sort($a, "test"); // failes because of rule 3
sort($a, 0, "test"); // failes because of rule 1
答案 3 :(得分:-1)
返回false的示例可能包括空数组,变量不是数组,内存不足,库调用失败,排序模块运行时失败,调用参数无效,磁盘包或驱动器不在线,排序算法或方法不符合该地区或发展中国家的规则