diff options
author | Dmitry Stogov <dmitry@zend.com> | 2014-12-19 13:07:35 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2014-12-19 13:07:35 +0300 |
commit | f7b6518d10d4a0ee09b49957df6e048ec622fa25 (patch) | |
tree | 6f063dbb3accfaba15fe18cb199d17d7af7b70f3 /ext/standard/array.c | |
parent | 441270db2c44c299467925d4c97ea5c5251ac474 (diff) | |
download | php-git-f7b6518d10d4a0ee09b49957df6e048ec622fa25.tar.gz |
don't sort array with single element
Diffstat (limited to 'ext/standard/array.c')
-rw-r--r-- | ext/standard/array.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c index 041c68558e..b985b88cd9 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -3420,10 +3420,12 @@ static void php_array_intersect(INTERNAL_FUNCTION_PARAMETERS, int behavior, int *list++ = *p; } ZVAL_UNDEF(&list->val); - if (behavior == INTERSECT_NORMAL) { - zend_qsort((void *) lists[i], hash->nNumOfElements, sizeof(Bucket), intersect_data_compare_func); - } else if (behavior & INTERSECT_ASSOC) { /* triggered also when INTERSECT_KEY */ - zend_qsort((void *) lists[i], hash->nNumOfElements, sizeof(Bucket), intersect_key_compare_func); + if (hash->nNumOfElements > 1) { + if (behavior == INTERSECT_NORMAL) { + zend_qsort((void *) lists[i], hash->nNumOfElements, sizeof(Bucket), intersect_data_compare_func); + } else if (behavior & INTERSECT_ASSOC) { /* triggered also when INTERSECT_KEY */ + zend_qsort((void *) lists[i], hash->nNumOfElements, sizeof(Bucket), intersect_key_compare_func); + } } } @@ -3838,10 +3840,12 @@ static void php_array_diff(INTERNAL_FUNCTION_PARAMETERS, int behavior, int data_ *list++ = *p; } ZVAL_UNDEF(&list->val); - if (behavior == DIFF_NORMAL) { - zend_qsort((void *) lists[i], hash->nNumOfElements, sizeof(Bucket), diff_data_compare_func); - } else if (behavior & DIFF_ASSOC) { /* triggered also when DIFF_KEY */ - zend_qsort((void *) lists[i], hash->nNumOfElements, sizeof(Bucket), diff_key_compare_func); + if (hash->nNumOfElements > 1) { + if (behavior == DIFF_NORMAL) { + zend_qsort((void *) lists[i], hash->nNumOfElements, sizeof(Bucket), diff_data_compare_func); + } else if (behavior & DIFF_ASSOC) { /* triggered also when DIFF_KEY */ + zend_qsort((void *) lists[i], hash->nNumOfElements, sizeof(Bucket), diff_key_compare_func); + } } } |