$array1 = array("$name1" => "$id1");
$array2 = array("$name2" => "$id2", "$name3" => "$id3");
我需要一个新的数组合在一起,即它将是
$array3 = array("$name1" => "$id1", "$name2" => "$id2", "$name3" => "$id3");
这样做的最佳方式是什么?
抱歉,我忘记了,这些ID永远不会相互匹配,但从技术上讲,名称可能,但不太可能,并且它们都需要列在一个数组中。我查看了array_merge,但不确定这是否是最好的方法。另外,你会如何对它进行单元测试?
答案 0 :(得分:98)
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"
}
答案 1 :(得分:21)
$array3 = array_merge($array1, $array2);
答案 2 :(得分:7)
另一个选项是array_replace
,其中原始数组被其他数组修改:
这意味着 key =&gt;保留值关联,不插入重复的键。
答案 3 :(得分:3)
我使用array_merge的包装器来处理SeanWM关于null数组的注释;我有时也想摆脱重复。我通常也想要将一个数组合并到另一个数组中,而不是创建一个新数组。最终结果如下:
/**
* 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);
}
}
答案 4 :(得分:2)
$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
答案 5 :(得分:0)
我偶然发现了这个问题,试图找出一种干净的方式来加入两个关联数组。
我试图加入两个彼此没有关系的不同表格。
这是我为PDO Query加入两个表而想到的。塞缪尔库克为我提供了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>';
也许这会帮助其他人。
答案 6 :(得分:0)
<强>更新强>
只是一个简单的注释,因为我可以看到这看起来非常愚蠢,并且它与纯PHP没有很好用,因为array_merge
只是在那里工作。但是在你急于downvote之前尝试使用PHP MongoDB驱动程序。那个家伙会因为某种原因添加索引,并且会破坏合并的对象。凭借我天真的小功能,合并完全按照传统array_merge
的方式进行。
我知道这是一个老问题,但我想再添加一个我最近使用MongoDB驱动程序查询的案例,而array_merge
,array_replace
和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;
}