note 88373 added to function.array-merge-recursive

From: 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

« previous php.notes (#149598) next »