php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #71658 Change array_merge() to merge valid parameters if any is invalid
Submitted: 2016-02-24 11:24 UTC Modified: 2021-01-06 16:19 UTC
Votes:1
Avg. Score:1.0 ± 0.0
Reproduced:0 of 1 (0.0%)
From: wadev at mailbox dot hu Assigned: cmb (profile)
Status: Closed Package: Arrays related
PHP Version: 7.0.3 OS: Any
Private report: No CVE-ID: None
View Add Comment Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: wadev at mailbox dot hu
New email:
PHP Version: OS:

 

 [2016-02-24 11:24 UTC] wadev at mailbox dot hu
Description:
------------
array_merge() function returns NULL if any of the arguments are not arrays.
This makes for a lot of boilerplate code / guard clauses, such that I, more often than not, rather end up using foreach for merging instead.

I don't know if I am the only one who expects it to either:

- return a merged array containing all of the valid arrays' keys/values, or
- return a merged array containing all of the valid arrays' keys/values before the first "invalid" argument.

This latter might (or might not) be preferrable on performance considerations.

Please propose a change and/or vote on proposal if this is even possible.
If so, I may make a patch if needed.

EDIT: as this seems similar to #64909, another proposal would be the ability to change the emitted E_WARNING into a catchable fatal error.

This is quite strange that in such case we could catch a java.lang.NullPointerException in Java, but nothing in PHP; quite counter-productive.


Test script:
---------------
<?php
var_dump(array_merge(['what', 'ever'], false));

Expected result:
----------------
array(2) {
  [0]=>
  string(4) "what"
  [1]=>
  string(4) "ever"
}

Actual result:
--------------
<br />
<b>Warning</b>:  array_merge(): Argument #2 is not an array in <b>[...][...]</b> on line <b>2</b><br />
NULL


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2016-08-04 17:54 UTC] cmb@php.net
-Assigned To: +Assigned To: cmb
 [2016-08-04 17:54 UTC] cmb@php.net
I don't see why array_merge() should behave differently than
array_intersect(), array_diff() etc. (and I wouldn't change them
all), but if you consider that an improvement, feel free to start
the RFC process (see <https://wiki.php.net/rfc/howto>).
 [2016-08-04 23:19 UTC] cmb@php.net
-Assigned To: cmb +Assigned To:
 [2021-01-06 16:19 UTC] cmb@php.net
-Status: Open +Status: Closed -Assigned To: +Assigned To: cmb
 [2021-01-06 16:19 UTC] cmb@php.net
Well, on further consideration this proposal makes no sense to me.
array_merge() excepts arrays, so passing something which is not an
array, and cannot be coerced to one, respectively, is just a
programming error.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Apr 25 21:01:36 2024 UTC