13

次のように、連想配列でarray_mergeを実行するにはどうすればよいですか。

配列1:

$options = array (
"1567" => "test",
"1853" => "test1",
);

アレイ2:

$option = array (
"none" => "N/A"
);

したがって、これら2つをarray_mergeする必要がありますが、そうすると(デバッグで)次のようになります。

Array
(
    [none] => N/A
    [0] => test
    [1] => test1
)
4

7 に答える 7

14

使用してみてください:

$ finalArray = $ options + $ option .see http://codepad.org/BJ0HVtac 重複するキーの動作を確認するだけで、これはテストしませんでした。一意のキーの場合、それはうまく機能します。

<?php

$options = array (
                  "1567" => "test",
                  "1853" => "test1",
                  );


$option = array (
"none" => "N/A"
);


$final = array_merge($option,$options);

var_dump($final);


$finalNew = $option + $options ;

var_dump($finalNew);

?>
于 2011-07-25T09:17:04.047 に答える
12

使用するだけ$options + $optionです!

var_dump($options + $option);

出力:

array(3) {
  [1567]=>
  string(4) "test"
  [1853]=>
  string(5) "test1"
  ["none"]=>
  string(3) "N/A"
}

ただし、キーの衝突がある場合は注意してください。PHPマニュアルの内容は次のとおりです。

最初の配列のキーは保持されます。配列キーが両方の配列に存在する場合、最初の配列の要素が使用され、2番目の配列の一致するキーの要素は無視されます。

于 2011-07-25T09:22:41.277 に答える
2
$final_option = $option + $options;
于 2011-07-25T09:24:37.653 に答える
1

2つの連想配列をマージして、キーが同じ場合は値を加算することを検討していました。いずれかの配列に固有のキーがある場合、それらは既存の値とともにマージされた配列に追加されます。

これを行う関数が見つからなかったので、これを作成しました:

function array_merge_assoc($array1, $array2)
{
     
    if(sizeof($array1)>sizeof($array2))
    {
        echo $size = sizeof($array1);
    }
    else
    {
        $a = $array1;
        $array1 = $array2;
        $array2 = $a;
         
        echo $size = sizeof($array1);
    }
     
    $keys2 = array_keys($array2);
    
    for($i = 0;$i<$size;$i++)
    {
        $array1[$keys2[$i]] = $array1[$keys2[$i]] + $array2[$keys2[$i]];
    }
     
    $array1 = array_filter($array1);
    return $array1;
 }

参照:http ://www.php.net/manual/en/function.array-merge.php#90136

于 2011-07-25T09:15:19.453 に答える
0

array_mergeうまくいかないときは、単に

<?php
$new = array();
foreach ($options as $key=>$value) $new[$key] = $value;
foreach ($option as $key=>$value) $new[$key] = $value;
?>

foreachまたは、どちらのアレイの優先度が高いかに応じて、2つのループを切り替えます

于 2011-07-25T09:14:24.007 に答える
0

このコードは、再帰的なマージに使用できます。

function merge($arr1, $arr2){
        $out = array();
        foreach($arr1 as $key => $val1){
            if(isset($arr2[$key])){
                if(is_array($arr1[$key]) && is_array($arr2[$key])){
                    $out[$key]=  merge($arr1[$key], $arr2[$key]);
                }else{
                    $out[$key]= array($arr1[$key], $arr2[$key]);
                }
                unset($arr2[$key]);
            }else{
                $out[$key] = $arr1[$key];
            }
        }
        return $out + $arr2;
 }
于 2013-12-10T08:04:05.503 に答える
0

同じキーを持つ配列の場合は、array_merge_recursive()

$array1 = array( "a" => "1" , "b" => "45" );

$array2 = array( "a" => "23" , "b" => "33" );

$newarray = array_merge_recursive($array1,$array2);

array_merge_recursive()上書きせず、値を配列として作成するだけです。

于 2016-10-11T15:23:36.200 に答える