$array1 = array("$name1" => "$id1");
$array2 = array("$name2" => "$id2", "$name3" => "$id3");
私はすべてを一緒に結合する新しい配列が必要です、つまりそれは
$array3 = array("$name1" => "$id1", "$name2" => "$id2", "$name3" => "$id3");
これを行う最良の方法は何ですか?
申し訳ありませんが、IDは相互に一致することはありませんが、技術的には名前は一致する可能性がありますが、そうなる可能性は低く、すべて1つの配列にリストする必要があります。 array_mergeを見ましたが、これが最善の方法であるかどうかはわかりませんでした。また、これをどのように単体テストしますか?
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"
}
array_merge()
を確認してください。
$array3 = array_merge($array1, $array2);
array_replace
もあります。この場合、元の配列は、重複キーを作成せずにkey => valueの関連付けを保持する他の配列によって変更されます。 。
Array_mergeのラッパーを使用して、null配列に関するSeanWMのコメントを処理します。また、重複を取り除きたい場合もあります。また、一般的に、新しい配列を作成するのではなく、ある配列を別の配列にマージしたいと思っています。これは次のようになります。
/**
* 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);
}
}
$array = array(
22 => true,
25 => true,
34 => true,
35 => true,
);
print_r(
array_replace($array, [
22 => true,
42 => true,
])
);
print_r(
array_merge($array, [
22 => true,
42 => true,
])
);
数値であるが、連想配列ではない場合は、array_replace
を使用する必要があります
UPDATEこれは本当にばかげているように見えますが、array_merge
はそこでのみ機能するため、純粋なPHPには使用できません。しかし、PHP MongoDBドライバーで試してみて、ダウン投票を急いでください。その男は何らかの理由でインデックスを追加し、マージされたオブジェクトを台無しにします。私の素朴な小さな機能で、マージは従来のarray_merge
で想定されていた通りになります。
私はそれが古い質問であることを知っていますが、最近MongoDBドライバークエリを使用して、array_merge
、array_replace
、array_Push
のいずれも機能しなかったケースをもう1つ追加したいと思います。配列の配列としてラップされたオブジェクトの少し複雑な構造がありました:
$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;
}
私は2つの連想配列を結合するためのきれいな方法を特定しようとしてこの質問につまずいた。
互いに関係のない2つの異なるテーブルを結合しようとしていました。
これは、2つのテーブルを結合するPDOクエリについて思いついたものです。 Samuel Cookは、彼に対するarray_merge()
+1のソリューションを私に特定しました。
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT * FROM ".databaseTbl_Residential_Prospects."";
$ResidentialData = $pdo->prepare($sql);
$ResidentialData->execute(array($lapi));
$ResidentialProspects = $ResidentialData->fetchAll(PDO::FETCH_ASSOC);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT * FROM ".databaseTbl_Commercial_Prospects."";
$CommercialData = $pdo->prepare($sql);
$CommercialData->execute(array($lapi));
$CommercialProspects = $CommercialData->fetchAll(PDO::FETCH_ASSOC);
$Prospects = array_merge($ResidentialProspects,$CommercialProspects);
echo '<pre>';
var_dump($Prospects);
echo '</pre>';
たぶんこれは他の誰かを助けるでしょう。