summaryrefslogtreecommitdiff
path: root/ext/standard/array.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2014-12-19 13:07:35 +0300
committerDmitry Stogov <dmitry@zend.com>2014-12-19 13:07:35 +0300
commitf7b6518d10d4a0ee09b49957df6e048ec622fa25 (patch)
tree6f063dbb3accfaba15fe18cb199d17d7af7b70f3 /ext/standard/array.c
parent441270db2c44c299467925d4c97ea5c5251ac474 (diff)
downloadphp-git-f7b6518d10d4a0ee09b49957df6e048ec622fa25.tar.gz
don't sort array with single element
Diffstat (limited to 'ext/standard/array.c')
-rw-r--r--ext/standard/array.c20
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);
+ }
}
}