Вопрос: Как правильно группировать эти массивы?


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

Array
(
[0] => Array
    (
        [id] => 489
        [cluster_id] => 
        [label_value_id] => 4
        [label_id] => 1
        [int_value] => 40
    )

[1] => Array
    (
        [id] => 489
        [cluster_id] => 
        [label_value_id] => 6
        [label_id] => 2
        [int_value] => 20
    )

[2] => Array
    (
        [id] => 489
        [cluster_id] => 
        [label_value_id] => 9
        [label_id] => 3
        [int_value] => 10
    )

)

Идея заключается в том, что в будущем будет несколько идентификаторов, но для простоты я имею только 1 запись с id 489.

Мне нужно, чтобы 3 массива (причина объединения) были 1 массивом, который выглядит примерно так, я хочу, чтобы подматрица основывалась на отношении label-value_id => int_value:

Array
(
[0] => Array
    (
        [id] => 489
        [cluster_id] => 
        [label_value_id] => 4
        [label_id] => 1
        [int_value] => 40
        [vector_data] => Array
        (
            [4] => 40
            [6] => 20
            [9] => 10
        )
    )
)

Я бы предпочел, чтобы это было сделано в PHP, а не в Query, потому что у меня нет контроля над запросами, когда я реализую это в прямом приложении.

Любая помощь высоко ценится!


4


источник


Ответы:


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

$result = array();
foreach($array as $values) {
    // initialization
    if(!isset($result[$values['id']])) {
        $result[$values['id']] = $values;
    }

    $result[$values['id']]['vector_data'][$values['label_value_id']] = $values['int_value'];
}

// $result = array_values($result); // optional key reindex

Образец вывода


1



Вы можете обработать массив из БД следующим образом:

$pdo = array(
    array(
        "id" => 489,
        "label_value_id" => 4,
        "int_value" => 40,
    ),
    array(
        "id" => 489,
        "label_value_id" => 6,
        "int_value" => 20,
    ),
    array(
        "id" => 489,
        "label_value_id" => 9,
        "int_value" => 10,
    ),
);

$result = array();
foreach ($pdo as $array) {
    if (!isset($result[$array['id']])) {
        $result[$array['id']] = array(
            "id" => $array['id'],
            "vector_data" => array()
        );
    }

    $result[$array['id']]['vector_data'][$array['label_value_id']] = $array['int_value'];
}

0



У меня такая же ситуация, и я решаю ее через PDO. Вот  доступные примеры. Я получаю такой же результат с кодом:

$sth->fetchAll(PDO::FETCH_ASSOC|PDO::FETCH_GROUP);

подумайте, что вы должны попробовать ...


0