Я также наткнулся на этот вопрос и провел некоторое исследование, если есть другие условия, когда sort возвращает 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;
}
В первом представлении вы видите, что функция сортировки возвращает false
только в случае сбоя zend_hash_sort
.zend_hash_sort
- это макрос, который на самом деле вызывает zend_hash_sort_ex
.Эта функция была довольно надежной и возвращает SUCCESS в во всех случаях - даже если вы передаете массивы с абсолютно несопоставимыми элементами.
Это возвращает нас к функции сортировки, которая выполняет проверку некоторых параметровмакросов и имеет три правила.
Функция принимает как минимум один аргумент и максимум 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