note 96199 deleted from function.array-merge-recursive by danbrown

From: Date: Sun, 14 Feb 2010 04:55:46 +0000
Subject: note 96199 deleted from function.array-merge-recursive by danbrown
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-165942@lists.php.net to get a copy of this message
Note Submitter: mark dot roduner at gmail dot com ---- In an attempt to improve the below examples, I've written a slightly less over engineered, but flexible implementation for merging recursive arrays... that actually works. <?php /** * Merges any number of arrays / parameters recursively, replacing * entries with string keys with values from latter arrays. * If the entry or the next value to be assigned is an array, then it * automagically treats both arguments as an array. * Numeric entries are appended, not replaced, but only if they are * unique * * calling: result = array_merge_recursive_distinct(a1, a2, ... aN) **/ function array_merge_recursive_distinct () { $arrays = func_get_args(); $base = array_shift($arrays); if(!is_array($base)) $base = empty($base) ? array() : array($base); foreach($arrays as $append) { if(!is_array($append)) $append = array($append); foreach($append as $key => $value) { if(!array_key_exists($key, $base) and !is_numeric($key)) { $base[$key] = $append[$key]; continue; } if(is_array($value) or is_array($base[$key])) { $base[$key] = array_merge_recursive_distinct($base[$key], $append[$key]); } else if(is_numeric($key)) { if(!in_array($value, $base)) $base[] = $value; } else { $base[$key] = $value; } } } return $base; } ?>

« previous php.notes (#165942) next »