Объединить массив без индекса ключа потери

У меня есть два массива

/** * Menu Navigation * @var array */ public $nav_top = array( 100 => 'Dashboard', 200 => 'Sell', 300 => 'Products', 400 => 'History', 500 => 'Customers', 600 => 'Setup' ); /** * Menu Navigation * @var array */ public $nav_sub = array( 201 => 'Current Sale', 202 => 'Retrieve Sale', 203 => 'Close Register', 301 => 'Product', 302 => 'Stock Control', 303 => 'Price Books', 304 => 'Types', 305 => 'Suppliers', 306 => 'Brands', 307 => 'Tags', 501 => 'Customer', 502 => 'Group' ); 

Как объединить этот массив без потери его ключевого индекса?

если я делаю это с помощью array_merge() индекс будет перезапускаться с нуля

 $nav = array_merge($Class->nav_top, $Class->nav_sub); var_dump($nav); # Output: array( 0 => 'Current Sale', 1 => 'Retrieve Sale', 2 => 'Close Register', ....... ); 

ожидаемый результат: ключ массива все тот же

 # Expected Output array( 100 => 'Dashboard', 200 => 'Sell', 300 => 'Products', ........ ); 

Самый легкий, о котором я могу думать:

 $combined = $nav_top + $nav_sub; 

Пример .

Мой совет

использовать jeroen Solution

Жесткий выход

 $combined = merge($nav_top,$nav_sub); 

функция

 function merge($arr1,$arr2) { if(!is_array($arr1)) $arr1 = array(); if(!is_array($arr2)) $arr2 = array(); $keys1 = array_keys($arr1); $keys2 = array_keys($arr2); $keys = array_merge($keys1,$keys2); $vals1 = array_values($arr1); $vals2 = array_values($arr2); $vals = array_merge($vals1,$vals2); $ret = array(); foreach($keys as $key) { list($unused,$val) = each($vals); $ret[$key] = $val; } return $ret; } 

Или

 function merge($a1, $a2) { $aRes = $a1; foreach ( array_slice ( func_get_args (), 1 ) as $aRay ) { foreach ( array_intersect_key ( $aRay, $aRes ) as $key => $val ) $aRes [$key] += $val; $aRes += $aRay; } return $aRes; } 

Демо: http://codepad.org/9B8V96Gf