note 88373 added to function.array-merge-recursive
| From: | remy dot damour at -please-no-spam-laposte dot net | Date: | Wed, 21 Jan 2009 14:28:33 +0000 |
| Subject: | note 88373 added to function.array-merge-recursive | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-149598@lists.php.net to get a copy of this message | ||
If what you want is merge all values of your array that are arrays themselves to get a resulting
array of depth one, then you're more looking for array_flatten function.
Unfortunately I did not find such native function in php, here is the one I wrote:
<?php
/**
* Flatten an array so that resulting array is of depth 1.
* If any value is an array itself, it is merged by parent array, and so on.
*
* @param array $array
* @param bool $preserver_keys OPTIONAL When true, keys are preserved when mergin nested arrays
(=> values with same key get overwritten)
* @return array
*/
function array_flatten($array, $preserve_keys = false)
{
if (!$preserve_keys) {
// ensure keys are numeric values to avoid overwritting when array_merge gets called
$array = array_values($array);
}
$flattened_array = array();
foreach ($array as $k => $v) {
if (is_array($v)) {
$flattened_array = array_merge($flattened_array, call_user_func(__FUNCTION__, $v,
$preserve_keys));
} elseif ($preserve_keys) {
$flattened_array[$k] = $v;
} else {
$flattened_array[] = $v;
}
}
return $flattened_array;
}
// example
$a = array ('k1' => 'a', 'k2' => array('k1' =>
'b', 'k4' => array('k3' => 'c')));
var_export(array_flatten($a)); // output: array(0 => 'a', 1 => 'b', 2
=> 'c')
var_export(array_flatten($a, true)); // output: array('k1' => 'b',
'k3' => 'c') // first 'k1' value gets overwritten by nested
'k1' value
?>
----
Server IP: 80.64.47.13
Probable Submitter: 84.123.119.214
----
Manual Page -- http://www.php.net/manual/en/function.array-merge-recursive.php
Edit -- https://master.php.net/note/edit/88373
Del: integrated -- https://master.php.net/note/delete/88373/integrated
Del: useless -- https://master.php.net/note/delete/88373/useless
Del: bad code -- https://master.php.net/note/delete/88373/bad+code
Del: spam -- https://master.php.net/note/delete/88373/spam
Del: non-english -- https://master.php.net/note/delete/88373/non-english
Del: in docs -- https://master.php.net/note/delete/88373/in+docs
Del: other reasons-- https://master.php.net/note/delete/88373
Reject -- https://master.php.net/note/reject/88373
Search -- https://master.php.net/manage/user-notes.php