簡體   English   中英

如何相應地將這些數組分組?

[英]How to group these arrays accordingly?

我正在使用PDO運行帶有2個聯接的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
    )

)

想法是以后會有多個id,但為簡單起見,我現在只有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中完成,因為當我將其實現到實時應用程序中時我無法控制查詢。

任何幫助深表感謝!

您可以使用另一個容器收集所有共享相同ID的批次,並使用其容器進行轉移。 初始化時,為該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

樣本輸出

您可以像這樣從DB處理數組:

$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'];
}

我有同樣的情況,我可以通過PDO解決。 這里有可用的例子。 我用代碼達到了相同的結果:

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

認為您應該嘗試...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM