php соединить массивы с одинаковыми ключами
array_merge
(PHP 4, PHP 5, PHP 7, PHP 8)
array_merge — Сливает один или большее количество массивов
Описание
Сливает элементы одного или большего количества массивов таким образом, что значения одного массива присоединяются к концу предыдущего. Результатом работы функции является новый массив.
Если входные массивы имеют одинаковые строковые ключи, тогда каждое последующее значение будет заменять предыдущее. Однако, если массивы имеют одинаковые числовые ключи, значение, упомянутое последним, не заменит исходное значение, а будет добавлено в конец массива.
В результирующем массиве значения исходного массива с числовыми ключами будут перенумерованы в возрастающем порядке, начиная с нуля.
Список параметров
Возвращаемые значения
Возвращает результирующий массив. Если вызывается без аргументов, возвращает пустой массив ( array ).
Список изменений
Версия | Описание |
---|---|
7.4.0 | Функция теперь может быть вызвана без каких-либо параметров. Ранее требовался хотя бы один параметр. |
Примеры
Пример #1 Пример использования array_merge()
Результат выполнения данного примера:
Пример #2 Простой пример использования array_merge()
Помните, что числовые ключи будут перенумерованы!
Если вы хотите дополнить первый массив элементами второго без перезаписи элементов первого массива и без переиндексации, используйте оператор объединения массивов + :
Ключи из первого массива будут сохранены. Если ключ массива существует в обоих массивах, то будет использован элемент из первого массива, а соответствующий элемент из второго массива будет проигнорирован.
Пример #3 Пример использования array_merge() с не массивами
Результат выполнения данного примера:
Смотрите также
User Contributed Notes 2 notes
In some situations, the union operator ( + ) might be more useful to you than array_merge. The array_merge function does not preserve numeric key values. If you need to preserve the numeric keys, then using + will do that.
[ 0 ] = «zero» ;
$array1 [ 1 ] = «one» ;
$array2 [ 1 ] = «one» ;
$array2 [ 2 ] = «two» ;
$array2 [ 3 ] = «three» ;
//This will result in::
?>
Note the implicit «array_unique» that gets applied as well. In some situations where your numeric keys matter, this behaviour could be useful, and better than array_merge.
Website-create.ru
Когда мы работаем с php, то почти всегда имеем дело с массивами. А операция объединения массивов — это то, что приходится проделывать довольно часто.
При этом мы можем хотеть объединять массивы с заменой элементов, у которых встречаются одинаковые ключи
Сегодня мы рассмотрим все эти варианты.
Существует несколько способов объединения массивов в php, но каждый из них может дать разные результаты. Очень важно хорошо осознавать, что и для чего вы делаете. От этого будет зависеть стабильность работы вашей программы.
На протяжении всего поста я буду рассматривать массивы, в каждом из которых 1 элемент имеет идентичный с элементом другого массива строковый ключ. Это важно, потому что при разных способах объединения мы будем получать разные результаты.
Объединение массивов без переиндексации
Чтобы объединить 2 или более массивов можно использовать оператор «+».
При этом, если во втором массиве встретится элемент с ключом, который имеет элемент из первого массива, то элемент второго массива будет проигнорирован (или выброшен). Давайте посмотрим.
А вот, что мы увидим на экране:
Как видно элемент из второго массива с ключом «name» был проигнорирован и не попал в результирующий массив.
Объединение массивов с помощью array_merge
Объединить массивы можно при помощи функции array_merge. В этом случае при совпадении строкового ключа второго массива с ключом первого, будет перезаписано значение элемента первого массива.
Обратите внимание, что это относится только к строковым ключам. В случае числовых ключей (если они идентичны) последнее значение будет добавлено в конец результирующего массива.
Чтобы все это увидеть, я немного модифицирую массивы, добавив им также по элементу с одинаковыми числовыми ключами.
А результат будет вот таким:
Как видите, элемент с ключом «name» добавился из второго массива, а элементы с числовыми индексами переиндексировались и оба оказались в массиве результата.
Объединение двух массивов в один ассоциативный
Сейчас посмотрим, как можно объединить 2 массива так, чтобы значения одного из них стали ключами, а значения второго — значениями.
Здесь нам поможет функция array_combine.
Она принимает 2 параметра:
Количество элементов в массивах должно совпадать, иначе, вместо массива с результатом вы получите false.
Давайте модифицируем наши массивы и посмотрим, как это работает.
Результатом этого кода будет следующий массив:
Как видите, значения первого массива стали ключами, а значения второго — значениями элементов нового массива.
Надеюсь этот пост оказался вам полезным и теперь вы точно знаете все нюансы при объединении массивов в php.
В качестве благодарности ставьте лайки и оставляйте комментарии ))
Также можете подписаться на обновления и всегда быть в курсе новых постов. Здесь никакого спама — только полезное. Форма поиска в сайдбаре справа.
Объединить два массива с одинаковыми ключами или связать
Я хотел бы создать какой-то EPG для веб-сайта из этого. Поскольку у меня нет опыта, мне, к сожалению, тяжело
У меня есть два массива
я хочу вывести что-то вроде этого, вставьте второе значение массива в первый массив, используя epg_channel_id
я попытался массив_рекурсивный, массив слияния и не работает.
я
Решение
Однако, если соответствующие индексы не гарантируют одинаковые идентификаторы каналов, это решение не будет работать, и вам нужно будет использовать один из других опубликованных ответов.
Другие решения
Вы должны зациклить два массива, чтобы получить желаемый результат: как вы должны соответствовать epg_channel_id от первого массива до второго массива внутренний ключ
Вы можете использовать ключ или нет array_key_exists во втором массиве, затем добавьте его в новый массив
array_merge_recursive хорошо работает для связанного массива, ключи которого являются строками. Цифровые клавиши будут добавлены. С php.net
Если входные массивы имеют одинаковые строковые ключи, то значения этих ключей объединяются в массив, и это делается рекурсивно, поэтому, если одно из значений является самим массивом, функция объединит его с соответствующей записью в другом массиве тоже. Однако, если массивы имеют одинаковый цифровой ключ, более позднее значение не будет перезаписывать исходное значение, а будет добавлено.
Вы должны преобразовать свой массив в строковые ключи или использовать один цикл для объединения дочерних массивов один за другим.
попробуйте прочитать значение ‘epg_channel_id’ из array1
и вставьте его в array1 от получения ‘ch111’ из array2
попробуйте поставить в foreach для каждого массива
Объединение массивов на основе значения ключа
у меня есть два массива массивов, которые имеют id key, и я хотел бы объединить данные вместе на основе ключа и значения ключа этого массива. Данные будут выглядеть примерно так:
есть ли особенно эффективная функция или трюк для обработки чего-то подобного? Или я должен просто перебирать элементы одного массива и передавать содержимое другому?
Я также использую Laravel, и данные являются результатом красноречивого запроса, поэтому я также могу использовать коллекции, если это сделает код более чистым.
7 ответов
можно использовать array_replace_recursive для объединения массивов в вашей конкретной ситуации.
Примечание: я использовал традиционный макет массива, потому что моя версия PHP еще не поддерживает новую:)
второй вариант
лучший способ использования цикла. Сначала вычислите максимальный массив, подсчитав это число, запустите цикл. Это сработает.
простой вложенный цикл решил бы цель.
Я бы предложил использовать коллекции laravel, так как этот вопрос имеет тег laravel.
Pure php решение использовать array_replace_recursive такой:
вы должны заметить, что array_replace_recursive объединить массивы по ключам. Итак, если вы получаете такие данные из базы данных:
array_replace_recursive вернутся повреждены слияние:
решение состоит в том, чтобы объединить array_replace_recursive С array_column и array_combine для объединения массивов по их
Объединить массив в один
Подскажите возможно соединить массивы в один, у меня заказ записывает в одну таблицу order, а товар в order_product.
Возможно получить массив такова вида
4 ответа 4
Вариант 1. Запрос в базу. Пример для MySQL:
Вариант 2. Цикл в PHP, если у вас 2 массива
Готовой функции нет. В вашем конкретном случае я бы выбрала вариант 1.
всё более чем очевидно
Для объединения массивов можно использовать merge()
Что-то типо такого:
Просто сложите массивы:
Всё ещё ищете ответ? Посмотрите другие вопросы с метками php mysql или задайте свой вопрос.
Похожие
Подписаться на ленту
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.9.17.40238
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.