Объединить несколько массивов в один с одинаковым значением ключа в них - PullRequest
1 голос
/ 26 февраля 2020

Я хочу создать файл экспорта в Excel из базы данных. Данные поступают из 2 таблиц: names и numbers, таблица names содержит только уникальные строки, но numbers может иметь несколько.
Как можно объединить эти два массива в один для достижения одинакового в качестве примера массива?

Массивы:

$names = array(
    array(
        "ID" => 1,
        "Name" => "Test1"
    ),
    array(
        "ID" => 2,
        "Name" => "Test2"
    )
);

$numbers = array(
    array(
        "ID" => 1,
        "Number" => "123"
    ),
    array(
        "ID" => 1,
        "Number" => "223"
    ),
    array(
        "ID" => 2,
        "Number" => "333"
    )
);

Пример массива:

$merged = array(
    array(
        "ID" => 1,
        "Name" => "Test1",
        "Number" => "123",
        "Number" => "223"
    ),
    array(
        "ID" => 2,
        "Name" => "Test2",
        "Number" => "333"
    )
);

1 Ответ

1 голос
/ 26 февраля 2020

Простой подход заключается в использовании двух циклов.

$merge = [];
foreach($names as $value) {
    $merge_sub = [];
    $merge_sub[] = $value['ID'];
    $merge_sub[] = $value['Name'];
    foreach($numbers as $n) {
        if($n['ID'] == $value['ID']) $merge_sub[] = $n['Number'];
    }
    $merge[] = $merge_sub;

}

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

Хотя вы можете попробовать использовать те же ключи, но с индексом, например:

$merge = [];
foreach($names as $value) {
    $merge_sub = [];
    $merge_sub['ID'] = $value['ID'];
    $merge_sub['Name'] = $value['Name'];
    $i = 0;
    foreach($numbers as $n) {
        if($n['ID'] == $value['ID']) $merge_sub['Number' . $i] = $n['Number'];
        $i++;
    }
    $merge[] = $merge_sub;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...