note 92574 added to function.array-replace-recursive
| From: | Gregoratder-meyerdotde at osu1 dot php dot net | Date: | Thu, 30 Jul 2009 01:13:09 +0000 |
| Subject: | note 92574 added to function.array-replace-recursive | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-158896@lists.php.net to get a copy of this message | ||
Nice that this function finally found its was to the PHP core! If you want to use it also with older
PHP versions before 5.3.0, you can define it this way:
<?php
if (!function_exists('array_replace_recursive'))
{
function array_replace_recursive($array, $array1)
{
function recurse($array, $array1)
{
foreach ($array1 as $key => $value)
{
// create new key in $array, if it is empty or not an array
if (!isset($array[$key]) || (isset($array[$key]) && !is_array($array[$key])))
{
$array[$key] = array();
}
// overwrite the value in the base array
if (is_array($value))
{
$value = recurse($array[$key], $value);
}
$array[$key] = $value;
}
return $array;
}
// handle the arguments, merge one by one
$args = func_get_args();
$array = $args[0];
if (!is_array($array))
{
return $array;
}
for ($i = 1; $i < count($args); $i++)
{
if (is_array($args[$i]))
{
$array = recurse($array, $args[$i]);
}
}
return $array;
}
}
?>
I called this function array_merge_recursive_overwrite() in my older projects, but
array_replace_recursive() sounds quite better while they do the same.
If you implemented such a compatible function before and don't want to refactor all your code,
you can update it with the following snippet to use the native (and hopefully faster) implementation
of PHP 5.3.0, if available. Just start your function with these lines:
<?php
// as of PHP 5.3.0 array_replace_recursive() does the work for us
if (function_exists('array_replace_recursive'))
{
return call_user_func_array('array_replace_recursive', func_get_args());
}
?>
----
Server IP: 212.124.37.9
Probable Submitter: 78.49.16.169
----
Manual Page -- http://www.php.net/manual/en/function.array-replace-recursive.php
Edit -- https://master.php.net/note/edit/92574
Del: integrated -- https://master.php.net/note/delete/92574/integrated
Del: useless -- https://master.php.net/note/delete/92574/useless
Del: bad code -- https://master.php.net/note/delete/92574/bad+code
Del: spam -- https://master.php.net/note/delete/92574/spam
Del: non-english -- https://master.php.net/note/delete/92574/non-english
Del: in docs -- https://master.php.net/note/delete/92574/in+docs
Del: other reasons-- https://master.php.net/note/delete/92574
Reject -- https://master.php.net/note/reject/92574
Search -- https://master.php.net/manage/user-notes.php