Nano Hash - криптовалюты, майнинг, программирование

PHP объединяет два ассоциативных массива в один массив

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

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

Мне нужен новый массив, объединяющий все вместе, т.е. это было бы

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

Как лучше всего это сделать?

Извините, я забыл, идентификаторы никогда не будут совпадать друг с другом, но технически имена могут, но маловероятно, и все они должны быть перечислены в одном массиве. Я посмотрел на array_merge, но не был уверен, что это лучший способ сделать это. Кроме того, как бы вы это протестировали?


  • Похоже, вы просто ищете array_merge. 01.11.2012
  • Я думаю, что лучший способ, если вы знаете, что все ключи разные, - это использовать оператор + =: $ array1 + = $ array2; Это добавляет все элементы $ array2 в конец $ array1. 10.11.2018

Ответы:


1

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"
    }
01.11.2012
  • В чем преимущество array_merge перед использованием оператора? 01.11.2012
  • Объединение массивов (+): оператор + добавляет элементы оставшихся ключей из правого массива к левому, в то время как дублированные ключи НЕ перезаписываются. array_merge (): если входные массивы имеют одинаковые строковые ключи, то более позднее значение для этого ключа перезапишет предыдущее. Однако, если массивы содержат числовые ключи, более позднее значение не будет перезаписывать исходное значение, а будет добавлено. Если все массивы содержат только числовые ключи, результирующему массиву присваиваются увеличивающиеся ключи, начиная с нуля. 01.11.2012
  • Также следует отметить, что array_merge вернет NULL, если какой-либо из аргументов равен NULL. 06.03.2014
  • Если есть целочисленные ключи, то они будут заменены на целые ключи НАЧАЛО с 0. Будьте очень осторожны с array_merge. Лучше использовать цикл foreach, чтобы делать то, что вы пытаетесь сделать. 08.12.2017

  • 2

    Ознакомьтесь с array_merge().

    $array3 = array_merge($array1, $array2);
    
    01.11.2012
  • @SudhanshuSaxena Учитывая, что я был первым, кто опубликовал это, я не понимаю, как это может быть повторный ответ. 04.06.2015

  • 3

    Также существует array_replace, где исходный массив изменяется другими массивами сохранение ассоциации key => value без создания повторяющихся ключей.

    • Те же ключи в других массивах приведут к перезаписи значений исходного массива.
    • Новые ключи в других массивах будут созданы в исходном массиве
    27.01.2017
  • Это правильный ответ. array_merge не будет работать, если у вас есть числовые ключи (все ключи будут преобразованы в согласованные индексы). 24.03.2017

  • 4

    Я использую оболочку вокруг 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);
        }
    }
    
    29.09.2015

    5
            $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

    06.06.2018

    6

    Я наткнулся на этот вопрос, пытаясь найти чистый способ объединить два ассоциированных массива.

    Я пытался соединить две разные таблицы, которые не были связаны друг с другом.

    Это то, что я придумал для 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>';
    

    Может быть, это поможет кому-то другому.

    20.02.2017

    7

    ОБНОВЛЕНИЕ Просто небольшое примечание, поскольку я вижу, это выглядит действительно глупо и бесполезно с чистым 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;
    }
    
    10.04.2018
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..