php - 如何相应地对这些数组进行分组?

标签 php mysql sql arrays pdo

我正在使用 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 而不是查询中完成此操作,因为当我将其实现到实时应用程序中时我无法控制查询。

非常感谢任何帮助!

最佳答案

您可以使用另一个容器来收集所有共享相同 ID 的批处理,使用其 key 来传输它们。在初始化时,为该 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

Sample Output

关于php - 如何相应地对这些数组进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29749123/

相关文章:

c# - 多行变成单行多列

php - 结果集mysql上的foreach只返回一个随机值

php - 薪资应用程序 - 复杂的 SQL 查询

php - 交响乐 2 : MemcachePool not found

javascript - WooCommerce 商店页面 : Quantity input on add to cart button

用于将不明确的结果集作为 ArrayList 返回的 Java、MySQL 方法

SQL:显示标准偏差内的平均值和最小值/最大值

php - node.js 如何重现 PHP MD5 加密

mysql - 在删除表之前删除行

mysql - 我在数据库表中遇到主键和外键的挑战