array_merge — Слить два или большее количество массивов


Содержание

FPublisher

Web-технологии: База знаний

Документация PHP

array_merge

array_merge — Слить два или большее количество массивов

Описание

array array_merge ( array $array1 , array $array2 [, array $. ] )

Функция array_merge() сливает элементы двух или большего количества массивов таким образом, что значения одного массива присоединяются к значениям предыдущего. Результатом работы функции является новый массив.

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

Пример #1 Пример использования array_merge()

$array1 = array («color» => «red», 2, 4);
$array2 = array («a», «b», «color» => «green», «shape» => «trapezoid», 4);
$result = array_merge ($array1, $array2);
print_r($result);

Результат выполнения данного примера:

Пример #2 Пример простого использования array_merge()

$array1 = array();
$array2 = array(1 => «data»);
$result = array_merge($array1, $array2);

Не забывайте, что числовые ключи будут перенумерованы!

Если вы хотите полностью сохранить массивы и просто слить их вместе, используйте оператор +:

$array1 = array();
$array2 = array(1 => «data»);
$result = $array1 + $array2;

Числовой ключ будет сохранен, поэтому ассоциация также сохраняется.


Замечание: Общие ключи будут перезаписаны по принципу «первый пришел — первый обработан».

Поведение функции array_merge() было изменено в PHP 5. В отличие от PHP 4, array_merge() принимает параметры только типа array. Однако вы можете использовать приведение типов. Смотрите следующий пример для уточнения подробностей.

Пример #3 Пример использования array_merge() с параметрами разных типов в PHP 5

= ‘foo’ ;
$end = array( 1 => ‘bar’ );
$result = array_merge ((array) $beginning , (array) $end );
print_r ( $result );
?>

Array_merge неизвестное количество массивов в качестве переменных переменных

Спасибо за помощь, как всегда.

Мой код генерирует массивы в следующем формате

Что приводит к именам массивов

Это хорошо работает, и мы знаем, что значение, которое содержит $ b, — это количество массивов, которые нам нужно объединить. Однако я не совсем понимаю, как это сделать, когда мы не узнаем до запуска скрипта, сколько массивов будет создано.

По сути, я хотел бы использовать следующее, чтобы получить результат, но, как вы видите, я могу сделать это только для количества результатов, которое, я думаю, вернет НЕ фактическое количество результатов. Любая помощь?

Решение

Ваша проблема — результат плохого дизайна.

Вы должны сделать что-то вроде этого:

Другие решения

Спасибо, это подтолкнуло меня в правильном направлении.

В настоящее время он настроен так:

Но, к сожалению, $ merged ничего не возвращает. Если вы посмотрите на следующее, первые 4 строки — это массивы $ readyformerge, а 5-я строка — желаемый результат:


Извините за боль, и я ЗНАЮ, что всем нужно видеть больше кода, но с тысячами строк его сложно отобразить!

Если вы можете помочь снова, это было бы здорово!

PHP | Объединение двух или более массивов с помощью array_merge ()

Array_merge () является встроенной функцией в PHP и используется для объединения двух или более массивов в один массив. Эта функция используется для объединения элементов или значений двух или более массивов в один массив. Объединение происходит таким образом, что значения одного массива добавляются в конец предыдущего массива. Функция принимает список массивов, разделенных запятыми, в качестве параметра, который необходимо объединить, и возвращает новый массив с объединенными значениями массивов, переданных в параметре.

Илон Маск рекомендует:  Создание превью изображения на основе свойства Overflow

Синтаксис:

Параметры: Функция array_merge () принимает список массивов, разделенных запятыми, в качестве параметра, который необходимо объединить, как показано в синтаксисе. В синтаксисе есть n массивов (($ array1, $ array2, ……, $ arrayn), разделенных (‘,’). Мы можем передать любое количество массивов в параметре.

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

Ниже программы иллюстрируют работу функции array_merge () в PHP:

    Объединение двух простых массивов : когда в функцию array_merge () передаются еще два массива, значения одного массива добавляются в конец предыдущего массива. Если два элемента имеют одинаковые строковые ключи, то последнее значение будет переопределено. Целочисленные ключи будут перенумерованы, начиная с нуля. Чтобы объединить два массива, функцию array_merge () можно выполнить следующим образом:

Как собрать один массив из нескольких массивов array_merge() PHP

Очень часто нужно собрать один большой массив из нескольких массивов. Как собрать один массив из нескольких массивов PHP? Тут поможет функция array_merge(). Функция сливает элементы одного или большего количества массивов таким образом, что значения одного массива присоединяются к концу предыдущего. Вы можете использовать циклы или специальные функции для соединения массивов. Это неудобно и нужно писать много строк кода для подобной задачи.

Помимо функции array_merge() есть функция array_merge_recursive(). Она вытаскивает массивы из каждого переданного массива. Попробуйте обе функции и сразу поймёте разницу по результатам. Функция array_merge() принимает только массивы. Если один из входных параметров не массив, то возникнет ошибка. Используйте условие if(is_array($arr) == false) $arr = (array)$arr. Тут произойдёт проверка элемента по типу данных. Если элемент по типу данных не массив, то произойдёт смена типа данных. Элемент станет массивом даже если не является массивом PHP.

array_merge или $array[]

Задался вопросом: а что быстрее (и есть ли вообще разница, учитывая, что это в цикле на тысячи итераций) между следующими конструкциями:

Я не прошу описать функции, мне нужно узнать, что лучше использовать. До меня использовалась array_merge. Не избыточно ли?

3 ответа 3

array_merge часто используют для задания элементов (опций) по-умолчанию. Например если во втором массиве может не оказаться значения с некоторым ключем, отсутствие которого в дальнейшем коде даст ошибку.

В данном контексте вместо


Разница определённо есть — array_merge сливает массивы, тогда как оператор [] = добавляет элемент массива в конец. Это совсем разные вещи, сравнивать их даже смысла нет — когда надо добавить элемент желательно использовать [] , это более читаемо.

array_merge порождает новый массив содержащий элементы обоих переданных ему массивов. При этом исходный массивы остаются неизменными.

[] = добавляет элемент в массив, если ему передать массив то он добавит это массив как элемент массива.

Поведение array_push идентично поведению [] = за исключением того что array_push возвращает новое количество элементов в массиве. Не утверждаю, но подозреваю что разницы в производительности между ними нет.

PHP — оптимизация многочисленных array_merge()

Небольшой хинт, о котором я собираюсь сейчас рассказать, я узнал уже довольно давно. Но, поскольку вот только что обнаружил, что именно в этом месте оптимизация помогла сэкономить изрядное количество времени уже в текущем проекте, то решил поделиться с общественностью (а мужики-то не знают, ага).

Илон Маск рекомендует:  Тег head

Буду краток, вот тестовый скрипт и то, что он выводит:

$start = microtime ( true ) ;
$res1 = array ( ) ;
for ( $i = 0 ; $i 1000 ; $i ++ ) <
$res1 = array_merge ( $res1 , array ( 1 , 2 , 3 ) ) ;
>
echo «1000 merges: » . ceil ( ( microtime ( true ) — $start ) * 1000 ) . «ms \n » ;

$start = microtime ( true ) ;
$toMerge = array ( ) ;
for ( $i = 0 ; $i 1000 ; $i ++ ) <
$toMerge [ ] = array ( 1 , 2 , 3 ) ;
>
$res2 = call_user_func_array ( ‘array_merge’ , $toMerge ) ;
echo «call_user_func_array(‘array_merge’. ): » . ceil ( ( microtime ( true ) — $start ) * 1000 ) . «ms \n » ;

echo «Is it true that the two arrays are equal? It is » ;
var_export ( $res2 === $res1 ) ;
echo «. \n » ;

Array_merge — Слить два или большее количество массивов

array_merge — Слить два или большее количество массивов

Описание array array_merge ( array array1, array array2 [, array . ] )

Функция array_merge() сливает элементы двух или большего количества массивов таким образом, что значения одного массива присоединяются к значениям предыдущего. Результатом работы функции является новый массив.

Если входные массивы имеют одинаковые строковые ключи, тогда значения, соответствующие этим ключам, рекурсивно сливаются в один массив, таким образом, если одно из значений является массивом, функция сливает его с соответствующим значением в другом массиве. Однако, если массивы имеют одинаковые числовые ключи, значение, упомянутое последним, не заменит исходное значение, а будет слито с ним.

Пример 1. Пример использования array_merge()

$array1 = array («color» => «red», 2, 4);
$array2 = array («a», «b», «color» => «green», «shape» => «trapezoid», 4);
$result = array_merge ($array1, $array2);
print_r($result);


Результат выполнения данного примера:

Array
(
[color] => green
[0] => 2
[1] => 4
[2] => a
[3] => b
[shape] => trapezoid
[4] => 4
)

Пример 2. Пример простого использования array_merge()

$array1 = array();
$array2 = array(1 => «data»);
$result = array_merge($array1, $array2);

Не забывайте, что числовые ключи будут перенумерованы!

Array
(
[0] => data
)

Если вы хотите полностью сохранить массивы и просто слить их вместе, используйте оператор + :

$array1 = array();
$array2 = array(1 => «data»);
$result = $array1 + $array2;
Числовой ключ будет сохранен, поэтому ассоциация также сохраняется.
Array
(
[1] => data
)

Замечание: Общие ключи будут перезаписаны по принципу «первый пришел — первый обработан».

Поведение функции array_merge() было изменено в PHP 5. В отличие от PHP 4, array_merge() принимает параметры только типа array . Однако вы можете использовать приведение типов. Смотрите следующий пример для уточнения подробностей.

Пример 3. Пример использования array_merge() с параметрами разных типов в PHP 5

Как объединить два массива путем суммирования объединенных значений

Я ищу функцию array_merge() , которая НЕ заменяет значения, а ADDS их.

Пример: это код, который я пытаюсь сделать:

К сожалению, это выводит это:

Затем я попытался вместо array_merge просто добавить два массива

Я действительно хочу, чтобы иметь возможность передавать столько массивов по мере необходимости, а затем получать их сумму. Поэтому в моем примере я хочу, чтобы результат был следующим:

Конечно, я могу schlepp и построить некоторую функцию со многими foreach и т.д., но я смотрю или умнее, чище. Спасибо за любые указатели!

Вы можете сократить это до следующего с помощью оператора подавления ошибок, но его следует считать уродливым:


В качестве альтернативы, некоторое отображение:

Или комбинация обоих решений:

Я думаю, что они достаточно кратки, чтобы адаптировать один из них на месте, когда это необходимо, но поставить его в терминах функции, которая принимает неограниченное количество массивов и суммирует их:

Как сравнить и затем слить два многомерных массива

0 Sid [2020-02-25 16:37:00]

Я пытаюсь объединить два многомерных массива следующим образом (примеры массивов — это только примеры, реальные — очень длинные и имеют тысячи элементов):

arrays php multidimensional-array array-merge

3 ответа

3 Решение Jared Farrish [2020-02-25 17:46:00]

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

То, что я делаю, — это объединение массивов (все они подмножества, так что не присущие конфликтам), затем я просматриваю и «сворачиваю вниз» на пару ключей массива>, ключ — дата/время, значение является множеством. Это дает эффект объединения каждой даты/времени с тем же ключом в этом массиве. Обратный вызов в этом случае просто «запоминает» последний встречный бит даты/времени, поэтому «не уверен, что нужно».

Наконец, я получаю версию массива с заменой даты/времени на индексы ( array_values() ). Это также интересно, потому что сортировка по дате была бы довольно простой, если бы array_values() был перенесен на более поздний.

Могут быть сделаны разные вещи, например, сохранить только первый или добавить каждый запрос (все они равны нулю в первом массиве). Механизм должен быть одним и тем же.

3 man0v [2020-02-25 16:50:00]

Один из способов:

где $a и $b — ваши массивы, а $out — конечный результат.

Как это устроено:


Поскольку мы сравниваем даты и знаем, что они уникальны, мы помещаем их во временный массив (в моем случае $res ) в качестве ключей элементов (ключи массивов уникальны). Для значений каждого элемента мы сравниваем значения запросов и сохраняем их.

Таким образом, первый цикл foreach циклы над первым массивом и добавляет элементы к $res в форме:

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

Таким образом, логика if проверяет, существует ли элемент, и если он это делает — получает большее значение для запросов и сохраняет его на дату. Если нет — он делает именно то, что он сделал в первом цикле foreach (создает новый элемент).

Наконец, мы хотим собрать массив так, как это выглядело, поэтому мы перебираем $res и заново создаем массив, как выглядели оригинальные два. В результате $out выполняется то, что вы запросили.

Памятка по сложению массивов

Одномерные массивы в PHP можно складывать с помощью функции array_merge() и оператора сложения «+». И каждый раз приходится вспоминать, в чем разница в использовании этих двух способов сложения массивов.

Сложение массивов с помощью array_merge(),
когда ключи не важны

Когда ключи не важны и нужно просто объединить массивы, используйте функцию array_merge().
$sum = array_merge($old1, $old2, $old3, . ) Старые ключи вообще не учитываются. Создаются новые числовые ключи, начиная с 0. То есть, бояться совпадения ключей не нужно.

Повторяющиеся значения нужно удалить с помощью функции array_unique(), и заготовка для слияния значений массивов будет выглядеть так:

Сложение массивов с сохранением ключей

Cложение массивов с помощью функции array_replace()

Если ключи важны (хоть ассоциативные, хоть числовые) и вам нужно обновить элементы одного массива элементами из других массивов, используйте функцию array_replace().

Cложение массивов с помощью оператора «+»

Этот способ сложения сложения массивов аналогичен предыдущему. Следует только обратить внимание на то, что здесь, чтобы обновить старый массив новым, нужно к новому массиву прибавить старый, что немного ломает мозг. Преимущества этого способа сложения — он производительнее и короче в записи.

Полезный пример использования такого сложения — массив в качестве параметра функции, когда значения по умолчанию обновляются входными данными:

Arr::mergeByKey() — сложение многомерных массивов

Внимание! Выше были приведены примеры только для одномерных массивов. Мы рекомендуем вам пользоваться универсальным методом Arr::mergeByKey(), который складывает по ключам массивы любого типа и любой размерности.

Илон Маск рекомендует:  Использование связки AJAX + JSON + MySQL
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL
Внимание