]> granicus.if.org Git - php/commit
Allow array_diff() and array_intersect() with single array argument
authorNikita Popov <nikita.ppv@gmail.com>
Tue, 8 Sep 2020 13:14:48 +0000 (15:14 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Wed, 9 Sep 2020 09:03:17 +0000 (11:03 +0200)
commit73ab7b30ca52a49fb11b2d61fc757c8eeb7137fd
tree89669b47aaa31a1260cb77adfea7b15999587446
parent9975986b7ef849c3a8e73a48748befbfdc50e416
Allow array_diff() and array_intersect() with single array argument

Both of these functions are well-defined when used with a single
array argument -- rejecting this case was an artificial limitation.
This is not useful when called with explicit arguments, but removes
edge-cases when used with argument unpacking:

    // OK even if $excludes is empty.
    array_diff($array, ...$excludes);

    // OK even if $arrays contains a single array only.
    array_intersect(...$arrays);

This matches the behavior of functions like array_merge() and
array_push(), which also allow calls with no array or a single
array respectively.

Closes GH-6097.
46 files changed:
UPGRADING
Zend/tests/function_arguments/argument_count_incorrect_internal_strict.phpt
ext/standard/array.c
ext/standard/basic_functions.stub.php
ext/standard/basic_functions_arginfo.h
ext/standard/tests/array/array_diff_1.phpt
ext/standard/tests/array/array_diff_assoc_error.phpt [deleted file]
ext/standard/tests/array/array_diff_assoc_variation1.phpt
ext/standard/tests/array/array_diff_assoc_variation2.phpt
ext/standard/tests/array/array_diff_error.phpt [deleted file]
ext/standard/tests/array/array_diff_key_error.phpt [deleted file]
ext/standard/tests/array/array_diff_key_variation1.phpt
ext/standard/tests/array/array_diff_key_variation2.phpt
ext/standard/tests/array/array_diff_single_array.phpt [new file with mode: 0644]
ext/standard/tests/array/array_diff_uassoc_error.phpt
ext/standard/tests/array/array_diff_uassoc_variation1.phpt
ext/standard/tests/array/array_diff_uassoc_variation2.phpt
ext/standard/tests/array/array_diff_ukey_variation1.phpt
ext/standard/tests/array/array_diff_ukey_variation2.phpt
ext/standard/tests/array/array_diff_variation1.phpt
ext/standard/tests/array/array_diff_variation2.phpt
ext/standard/tests/array/array_intersect_assoc_error.phpt [deleted file]
ext/standard/tests/array/array_intersect_assoc_variation1.phpt
ext/standard/tests/array/array_intersect_assoc_variation2.phpt
ext/standard/tests/array/array_intersect_error.phpt [deleted file]
ext/standard/tests/array/array_intersect_key_error.phpt [deleted file]
ext/standard/tests/array/array_intersect_key_variation1.phpt
ext/standard/tests/array/array_intersect_key_variation2.phpt
ext/standard/tests/array/array_intersect_uassoc_variation1.phpt
ext/standard/tests/array/array_intersect_uassoc_variation2.phpt
ext/standard/tests/array/array_intersect_ukey_variation1.phpt
ext/standard/tests/array/array_intersect_ukey_variation2.phpt
ext/standard/tests/array/array_intersect_variation1.phpt
ext/standard/tests/array/array_intersect_variation2.phpt
ext/standard/tests/array/array_udiff_assoc_variation1.phpt
ext/standard/tests/array/array_udiff_assoc_variation2.phpt
ext/standard/tests/array/array_udiff_uassoc_variation1.phpt
ext/standard/tests/array/array_udiff_uassoc_variation2.phpt
ext/standard/tests/array/array_udiff_variation1.phpt
ext/standard/tests/array/array_udiff_variation2.phpt
ext/standard/tests/array/array_uintersect_assoc_variation1.phpt
ext/standard/tests/array/array_uintersect_assoc_variation2.phpt
ext/standard/tests/array/array_uintersect_uassoc_variation1.phpt
ext/standard/tests/array/array_uintersect_uassoc_variation2.phpt
ext/standard/tests/array/array_uintersect_variation1.phpt
ext/standard/tests/array/array_uintersect_variation2.phpt