我正在编写一个库例程,其中包括对嵌套数组进行一些相当复杂的排序。
从文档中我看到,所有的数组排序函数(包括使用内置比较器的函数)都可能在失败时返回false——但这种情况何时会出现呢?
如果你发送给函数的变量不是数组,那么它将失败
示例:
asort('Hello');//fails
asort(array(1,2,35,7,2,8,3));//true
sort()
(等等)返回 FALSE 的 唯一 条件吗?否则,这个答案可能会误导人! - Doin我也遇到了这个问题,并进行了一些研究,如果有其他条件,则排序返回false。查看代码后发现此排序函数。
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;
}
该函数至少需要一个参数,最多两个参数。
第一个参数必须是一个数组
第二个参数(如果给出)必须是一个长整型
$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
返回 false 的示例可能包括空数组、变量不是数组、可用内存不足、库调用失败、排序模块运行时失败、调用参数无效、磁盘包或驱动器未联机、排序算法或方法与开发地区或国家的规则不兼容。
sort()
函数实际上返回FALSE的“一般排序失败条件”类型。从被接受的答案来看,那只会是“变量不是数组”。如果出现其他情况,它们可能会导致运行时错误,而不是FALSE返回值。 - Doin