function array_merge_recursive_numeric($array1, $array2) { foreach ($array2 as $key => $value) { if (!isset($array1[$key]) || !is_array($array1[$key])) { $array1[$key] = $value; } else { $array1[$key] = array_merge_recursive_numeric($array1[$key], $value); } } return $array1; }
public function initialize() { // Checking module status - is it installed and active $this->check_status(); if (!$this->manifest['active']) { return; } // Setting constants - if any if (isset($this->manifest['constants']) && is_array($this->manifest['constants']) && !empty($this->manifest['constants'])) { foreach ($this->manifest['constants'] as $constant_name => $constant_value) { defined($constant_name) or define($constant_name, $constant_value); } } // Adding vars - if any // Due to possible introduce of new constants in previous step vars is assigned via special method to honor new constants // Assignation can work with simple variables and with multidimensional arrays - for ex. 'sn_data[groups][test]' // New values from module variables will overwrite previous values (for root variables) and array elements with corresponding indexes (for arrays) // Constants as array indexes are honored - it's make valid such declarations as 'sn_data[ques][QUE_STRUCTURES]' $this->manifest['vars'] = $this->__assign_vars(); if (!empty($this->manifest['vars'])) { $vars_assigned = array(); foreach ($this->manifest['vars'] as $var_name => $var_value) { $sub_vars = explode('[', str_replace(']', '', $var_name)); $var_name = $sub_vars[0]; if (!isset($vars_assigned[$var_name])) { $vars_assigned[$var_name] = true; global ${$var_name}; } $pointer =& ${$var_name}; if (($n = count($sub_vars)) > 1) { for ($i = 1; $i < $n; $i++) { if (defined($sub_vars[$i])) { $sub_vars[$i] = constant($sub_vars[$i]); } if (!isset($pointer[$sub_vars[$i]]) && $i != $n) { $pointer[$sub_vars[$i]] = array(); } $pointer =& $pointer[$sub_vars[$i]]; } } if (!isset($pointer) || !is_array($pointer)) { $pointer = $var_value; } elseif (is_array(${$var_name})) { $pointer = array_merge_recursive_numeric($pointer, $var_value); } } } // Overriding function if any global $functions; sn_sys_handler_add($functions, $this->manifest['functions'], $this); // Patching game menu - if any global $sn_menu_extra, $sn_menu_admin_extra; isset($this->manifest['menu']) and $this->__patch_menu($sn_menu_extra, $this->manifest['menu']); isset($this->manifest['menu_admin']) and $this->__patch_menu($sn_menu_admin_extra, $this->manifest['menu_admin']); global $sn_mvc; foreach ($sn_mvc as $handler_type => &$handler_data) { sn_sys_handler_add($handler_data, $this->manifest['mvc'][$handler_type], $this, $handler_type); } if (isset($this->manifest['i18n']) && is_array($this->manifest['i18n']) && !empty($this->manifest['i18n'])) { foreach ($this->manifest['i18n'] as $i18n_page_name => &$i18n_file_list) { foreach ($i18n_file_list as &$i18n_file_data) { if (is_array($i18n_file_data) && !$i18n_file_data['path']) { $i18n_file_data['path'] = $this->manifest['root_relative']; } } if (!isset($sn_mvc['i18n'][$i18n_page_name])) { $sn_mvc['i18n'][$i18n_page_name] = array(); } $sn_mvc['i18n'][$i18n_page_name] += $i18n_file_list; } } if (!empty($this->manifest['javascript']) && is_array($this->manifest['javascript'])) { foreach ($this->manifest['javascript'] as $javascript_page_name => &$javascript_list) { !isset($sn_mvc['javascript'][$javascript_page_name]) ? $sn_mvc['javascript'][$javascript_page_name] = array() : false; foreach ($javascript_list as $script_name => &$script_content) { $sn_mvc['javascript'][$javascript_page_name][$script_name] = $script_content; } } } }
function array_merge_recursive_numeric($array1, $array2) { foreach ($array2 as $key => $value) { // if(!isset($array1[$key]) || !is_array($array1[$key])) { // $array1[$key] = $value; // } else { // $array1[$key] = array_merge_recursive_numeric($array1[$key], $value); // } $array1[$key] = !isset($array1[$key]) || !is_array($array1[$key]) ? $value : array_merge_recursive_numeric($array1[$key], $value); } return $array1; }