Rob,

Thanks for your code example however having them as class properties
will not work.  The main reason is that the default array is created
by reading a YAML file.  The array is populated by reading a section
of a flat file and then it reads a section specific to the current
page (if any) and overrides the defaults.  Here is the code I have
used to accomplish this.

Thanks to every who responded.

        // parse through an array, $a is the original array and
        // $b is the new array to merge into it
        function override($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] = $this->override((isset($a[$key]) ? 
$a[$key] :
array()), (isset($b[$key]) ? $b[$key] : array()));
                }



                // return the new, merged array
                return $new;
        }

--
Joseph Crawford Jr.
Zend Certified Engineer
Codebowl Solutions, Inc.
http://www.codebowl.com/
Blog: http://www.josephcrawford.com/
1-802-671-2021
[EMAIL PROTECTED]
_______________________________________________
New York PHP Community Talk Mailing List
http://lists.nyphp.org/mailman/listinfo/talk

NYPHPCon 2006 Presentations Online
http://www.nyphpcon.com

Show Your Participation in New York PHP
http://www.nyphp.org/show_participation.php

Reply via email to