91
$array1 = array("$name1" => "$id1");

$array2 = array("$name2" => "$id2", "$name3" => "$id3");

すべてを組み合わせた新しい配列が必要です。つまり、

$array3 = array("$name1" => "$id1", "$name2" => "$id2", "$name3" => "$id3");

これを行う最善の方法は何ですか?

申し訳ありませんが、ID が互いに一致することは決してありませんが、技術的には名前が一致する可能性はありますが、可能性は低く、すべて 1 つの配列にリストする必要があります。array_merge を見ましたが、これが最善の方法であるかどうかはわかりませんでした。また、これをどのように単体テストしますか?

4

7 に答える 7

137

array_merge()の方が効率的ですが、いくつかのオプションがあります。

$array1 = array("id1" => "value1");

$array2 = array("id2" => "value2", "id3" => "value3", "id4" => "value4");

$array3 = array_merge($array1, $array2/*, $arrayN, $arrayN*/);
$array4 = $array1 + $array2;

echo '<pre>';
var_dump($array3);
var_dump($array4);
echo '</pre>';


// Results:
    array(4) {
      ["id1"]=>
      string(6) "value1"
      ["id2"]=>
      string(6) "value2"
      ["id3"]=>
      string(6) "value3"
      ["id4"]=>
      string(6) "value4"
    }
    array(4) {
      ["id1"]=>
      string(6) "value1"
      ["id2"]=>
      string(6) "value2"
      ["id3"]=>
      string(6) "value3"
      ["id4"]=>
      string(6) "value4"
    }
于 2012-11-01T02:50:34.440 に答える
24

チェックアウトしてくださいarray_merge()

$array3 = array_merge($array1, $array2);
于 2012-11-01T02:47:31.107 に答える
3

null 配列に関する SeanWM のコメントに対処するために、array_merge のラッパーを使用します。また、重複を取り除きたい場合もあります。また、新しい配列を作成するのではなく、通常、ある配列を別の配列にマージしたいと考えています。これは次のようになります。

/**
 * Merge two arrays - but if one is blank or not an array, return the other.
 * @param $a array First array, into which the second array will be merged
 * @param $b array Second array, with the data to be merged
 * @param $unique boolean If true, remove duplicate values before returning
 */
function arrayMerge(&$a, $b, $unique = false) {
    if (empty($b)) {
        return;  // No changes to be made to $a
    }
    if (empty($a)) {
        $a = $b;
        return;
    }
    $a = array_merge($a, $b);
    if ($unique) {
        $a = array_unique($a);
    }
}
于 2015-09-29T10:01:27.030 に答える
0

更新 これは本当にばかげているように見えますが、純粋なPHPではうまく機能しないため、簡単にメモしてくださいarray_merge。ただし、急いで反対票を投じる前に、PHP MongoDB ドライバーで試してみてください。その男は何らかの理由でインデックスを追加し、マージされたオブジェクトを台無しにします。私の単純な小さな関数を使用すると、マージは従来のarray_merge.


array_merge私はそれが古い質問であることを知っていますが、最近array_replaceMongoDBドライバーのクエリで発生したケースをもう1つ追加したいと思いarray_pushます。配列内の配列としてラップされたオブジェクトの少し複雑な構造がありました。

$a = [
 ["a" => [1, "a2"]],
 ["b" => ["b1", 2]]
];
$t = [
 ["c" => ["c1", "c2"]],
 ["b" => ["b1", 2]]
];

そして、次のように同じ構造を維持しながらそれらをマージする必要がありました。

$merged = [
 ["a" => [1, "a2"]],
 ["b" => ["b1", 2]],
 ["c" => ["c1", "c2"]],
 ["b" => ["b1", 2]]
];

私が思いついた最善の解決策はこれでした:

public static function glueArrays($arr1, $arr2) {
    // merges TWO (2) arrays without adding indexing. 
    $myArr = $arr1;
    foreach ($arr2 as $arrayItem) {
        $myArr[] = $arrayItem;
    }
    return $myArr;
}
于 2018-04-10T17:51:16.013 に答える