array( 'a' => 'a1', 'b' => 'b1', 'c' => array( 'd' => 'd1', 'e' => 'e1', ), ), 'testb' => array( 'a' => 'a1', 'b' => 'b1', 'c' => array( 0 => 'd1', 1 => 'e1', 2 => 'f1', ), ), ); $b = array( 'testa' => array( 'a' => 'test', 'c' => array( 'd' => 'test', ), ), 'testb' => array( 'c' => array( 0 => 'g1', 1 => 'h1', 2 => 'i1', ), ), 'testc' => 'hi', ); */ //echo var_export(unserialize('a:2:{s:7:"default";a:5:{s:10:"http_metas";a:2:{s:12:"content-type";s:24:"text/html; charset=utf-8";s:16:"content-language";s:5:"en-us";}s:5:"metas";a:5:{s:14:"PreventParsing";s:4:"true";s:6:"robots";s:17:"noindex, nofollow";s:11:"description";s:150:"Recruiting and HR news, information and community -- including articles, discussions, blogs, jobs, conferences, research, email publications and more.";s:9:"copyright";i:2007;s:8:"keywords";s:34:"recruiting, staffing, HR, business";}s:5:"links";a:3:{s:11:"stylesheets";a:3:{i:0;a:2:{s:10:"stylesheet";s:9:"reset.css";s:5:"media";s:3:"all";}i:1;a:2:{s:10:"stylesheet";s:10:"common.css";s:5:"media";s:3:"all";}i:2;a:2:{s:10:"stylesheet";s:10:"global.css";s:5:"media";s:18:"screen, projection";}}s:13:"shortcut icon";s:26:"/images/design/favicon.ico";s:11:"javascripts";a:4:{i:0;s:9:"jquery.js";i:1;s:12:"interface.js";i:2;s:17:"jquery.plugins.js";i:3;s:9:"global.js";}}s:4:"page";a:3:{s:8:"template";s:12:"mainTemplate";s:5:"title";s:52:"ERE.net - Recruiting news, information and community";s:3:"ssl";b:0;}s:3:"ads";a:3:{s:6:"top_ad";b:0;s:8:"right_ad";b:1;s:9:"bottom_ad";b:0;}}s:15:"auth/login/test";a:2:{s:4:"page";a:1:{s:5:"title";s:9:"Test Page";}s:5:"links";a:1:{s:11:"stylesheets";a:1:{i:0;a:2:{s:10:"stylesheet";s:8:"test.css";s:5:"media";s:4:"test";}}}}}')); //exit; $arrays = array ( 'default' => array ( 'http_metas' => array ( 'content-type' => 'text/html; charset=utf-8', 'content-language' => 'en-us', ), 'metas' => array ( 'PreventParsing' => 'true', 'robots' => 'noindex, nofollow', 'description' => 'Recruiting and HR news, information and community -- including articles, discussions, blogs, jobs, conferences, research, email publications and more.', 'copyright' => 2007, 'keywords' => 'recruiting, staffing, HR, business', ), 'links' => array ( 'stylesheets' => array ( 0 => array ( 'stylesheet' => 'reset.css', 'media' => 'all', ), 1 => array ( 'stylesheet' => 'common.css', 'media' => 'all', ), 2 => array ( 'stylesheet' => 'global.css', 'media' => 'screen, projection', ), ), 'shortcut icon' => '/images/design/favicon.ico', 'javascripts' => array ( 0 => 'jquery.js', 1 => 'interface.js', 2 => 'jquery.plugins.js', 3 => 'global.js', ), ), 'page' => array ( 'template' => 'mainTemplate', 'title' => 'ERE.net - Recruiting news, information and community', 'ssl' => false, ), 'ads' => array ( 'top_ad' => false, 'right_ad' => true, 'bottom_ad' => false, ), ), 'auth/login/test' => array ( 'page' => array ( 'title' => 'Test Page', ), 'links' => array ( 'stylesheets' => array ( 0 => array ( 'stylesheet' => 'test.css', 'media' => 'test', ), ), 'javascripts' => array ( 0 => 'test.js', 1 => 'test2.js', ), ), ), ); $a = $arrays['default']; $b = $arrays['auth/login/test']; // parse through an array, $a is the original array and // $b is the new array to merge into it function parse_array($a, $b) { // an array that will hold the new, properly // merged version of the two arrays $new = array(); // if we've encountered numbered keys, this // will be true $numbers = FALSE; // if $a is bigger than $b, lots of code repetition // beyond this point.. ugh. if(count($a) >= count($b)) { // override the arrays if necessary foreach($a as $key => $val) { // if we've found a number, stop the loop if(is_numeric($key)) // dunno why ctype_digit didn't work... { $numbers = TRUE; break; } // otherwise, override the key with a $b value // if it exists. else $new[$key] = isset($b[$key]) ? $b[$key] : $a[$key]; } } // otherwise.. else { // override the arrays if necessary foreach($b as $key => $val) { if(is_numeric($key)) { $numbers = TRUE; break; } // otherwise, override the key with an $a value // if it exists. else $new[$key] = isset($a[$key]) ? $a[$key] : $b[$key]; } } // merge the arrays if they are numbered keys if($numbers) $new = array_merge($a, $b); // loop through the new array and check for sub-arrays foreach($new as $key => $val) { // recursively go through if(is_array($new[$key]) && !$numbers) $new[$key] = parse_array((isset($a[$key]) ? $a[$key] : array()), (isset($b[$key]) ? $b[$key] : array())); } // return the new, merged array return $new; } $new = parse_array($a, $b); print_r($new); ?>