note 100240 added to function.array-merge
| From: | nzujev | Date: | Sun, 03 Oct 2010 21:28:13 +0000 |
| Subject: | note 100240 added to function.array-merge | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-172913@lists.php.net to get a copy of this message | ||
Be ready to surprise like this one.
array_merge renumbers numeric keys even if key is as string.
keys '1' & '2' will be updated to 0 & 1, but '1.1' &
'1.2' remain the same, but they are numeric too (is_numeric('1.1') -> true)
It's better to use '+' operator or to have your own implementation for array_merge.
<?php
$x1 = array (
'1' => 'Value 1',
'1.1' => 'Value 1.1',
);
$x2 = array (
'2' => 'Value 2',
'2.1' => 'Value 2.1',
);
$x3 = array_merge( $x1, $x2 );
echo '<pre>NOT as expected: '. print_r( $x3, true ) .'</pre>';
$x3 = $x1 + $x2;
echo '<pre>As expected: '. print_r( $x3, true ) .'</pre>';
?>
NOT as expected: Array
(
[0] => Value 1
[1.1] => Value 1.1
[1] => Value 2
[2.1] => Value 2.1
)
As expected: Array
(
[1] => Value 1
[1.1] => Value 1.1
[2] => Value 2
[2.1] => Value 2.1
)
----
Server IP: 130.206.1.5
Probable Submitter: 87.219.4.154
----
Manual Page -- http://www.php.net/manual/en/function.array-merge.php
Edit -- https://master.php.net/note/edit/100240
Del: integrated -- https://master.php.net/note/delete/100240/integrated
Del: useless -- https://master.php.net/note/delete/100240/useless
Del: bad code -- https://master.php.net/note/delete/100240/bad+code
Del: spam -- https://master.php.net/note/delete/100240/spam
Del: non-english -- https://master.php.net/note/delete/100240/non-english
Del: in docs -- https://master.php.net/note/delete/100240/in+docs
Del: other reasons-- https://master.php.net/note/delete/100240
Reject -- https://master.php.net/note/reject/100240
Search -- https://master.php.net/manage/user-notes.php