#25494 [Bgs]: array_merge allowing "false" as argument

From: Date: Thu, 11 Sep 2003 15:50:40 +0000
Subject: #25494 [Bgs]: array_merge allowing "false" as argument
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-47462@lists.php.net to get a copy of this message
ID: 25494 User updated by: enygma at phpdeveloper dot org Reported By: enygma at phpdeveloper dot org Status: Bogus Bug Type: Arrays related Operating System: Red Hat Linux PHP Version: 4.3.2 New Comment: it still seems silly to me that a string passed into an array function was taken without so much as a warning. even more strange that it was suddenly treated as an array and merged into the other valid array. maybe a warning would be enough to deter this in the future? Previous Comments: ------------------------------------------------------------------------ [2003-09-11 11:42:26] jay@php.net If you use var_dump() in place of print_r(), you'd see that it's not a mysterious value, it's 'false'. The boolean value is being converted to an array index in array_merge(). (Any value would produce similar results -- $array1=4; would produce an array value of $last_array[0]==4.) array_intersect() does a type check before it does anything, which is why the warning comes up. While it seems inconsistent, I can't see this being changed because it would affect BC (albeit BC on a somewhat obscure, undocumented feature). Somebody correct me here if I'm wrong. So I'm bogusing it for now. J ------------------------------------------------------------------------ [2003-09-11 11:42:19] andrey@php.net 1. Please use var_dump() instead of print_r() 2. The value in the merged array is (bool) false ------------------------------------------------------------------------ [2003-09-11 10:59:27] enygma at phpdeveloper dot org array_merge_recursive() shows the same behavior array_intersect(), however, doesn't and gives a correct warning message ------------------------------------------------------------------------ [2003-09-11 10:57:27] enygma at phpdeveloper dot org Description: ------------ Code: --------------------------------------- $array1=false; $array2=array("test"=>"1","testing"=>"2"); $last_array=array_merge($array1,$array2); echo "<pre>"; print_r($last_array); echo "</pre>"; --------------------------------------- Result: --------------------------------------- Array ( [0] => [test] => 1 [testing] => 2 ) --------------------------------------- Please note that not only does array_merge allow the "false" to be passed in, but when it is, a mysterious [0] appears in the results (null array value?) Reproduce code: --------------- <?php $array1=false; $array2=array("test"=>"1","testing"=>"2"); $last_array=array_merge($array1,$array2); echo "<pre>"; print_r($last_array); echo "</pre>"; ?> Expected result: ---------------- Either an "invalid argument" for the "false" being passed in, or no extra Null array value appended to the resulting array. Actual result: -------------- Array ( [0] => [test] => 1 [testing] => 2 ) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=25494&edit=1

« previous php.bugs (#47462) next »