У меня есть два массива
/** * 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; }