$array1 = array("$name1" => "$id1");
$array2 = array("$name2" => "$id2", "$name3" => "$id3");
Мне нужен новый массив, объединяющий все вместе, т.е.
$array3 = array("$name1" => "$id1", "$name2" => "$id2", "$name3" => "$id3");
Как лучше всего это сделать?
Извините, я забыл, идентификаторы никогда не будут соответствовать друг другу, но технически имена могут, но маловероятно, и все они должны быть перечислены в одном массиве. Я посмотрел на array_merge, но не был уверен, что это лучший способ сделать это. Кроме того, как бы вы это протестировали?
php
arrays
multidimensional-array
associative-array
jsteinmann
источник
источник
Ответы:
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
вернет NULL, если какой-либо из аргументов равен NULL.Проверить
array_merge()
.$array3 = array_merge($array1, $array2);
источник
Также существует ситуация
array_replace
, когда исходный массив модифицируется другими массивами, сохраняя связь ключ => значение без создания дублирующих ключей.источник
Я использую оболочку для array_merge, чтобы иметь дело с комментарием 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
источник
Я наткнулся на этот вопрос, пытаясь определить чистый способ соединения двух массивов ассоциаций.
Я пытался соединить две разные таблицы, которые не были связаны друг с другом.
Это то, что я придумал для 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>';
Может быть, это поможет кому-то другому.
источник
ОБНОВЛЕНИЕ Просто небольшое примечание, поскольку я вижу, что это выглядит действительно глупо и бесполезно с чистым PHP, потому что там
array_merge
просто работает. НО попробуйте это с драйвером PHP MongoDB, прежде чем бросаться в голосование против. Этот чувак БУДЕТ добавлять индексы по какой-либо причине и БУДЕТ разрушать объединенный объект. С моей наивной маленькой функцией слияние получается именно так, как и предполагалось с традиционнымarray_merge
.Я знаю, что это старый вопрос, но я хотел бы добавить еще один случай, который у меня был недавно с запросами драйвера MongoDB, и ни один из них
array_merge
иarray_replace
неarray_push
работал. У меня была немного сложная структура объектов, завернутых в массивы в array:$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; }
источник