18

私は2つの配列を持っています

/**
 * 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'
);

キー インデックスを失うことなく、この 2 つの配列を結合する方法は?

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',
    ........
);
4

2 に答える 2

60

私が考えることができる最も簡単なもの:

$combined = $nav_top + $nav_sub;

于 2012-04-24T21:02:53.823 に答える
1

私のアドバイス

jeroenソリューションを使用

難しい方法

$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

于 2012-04-24T21:11:47.590 に答える