【问题标题】:Dedupe array of database results数据库结果的重复数据删除数组
【发布时间】:2022-01-15 08:42:06
【问题描述】:

来自 PDO 查询的结果集如下...

Array
(
[0] => Array
    (
        [activity_link_type] => Category
        [data_id] => 1
    )

[1] => Array
    (
        [activity_link_type] => Category
        [data_id] => 38
    )

[2] => Array
    (
        [activity_link_type] => PData
        [data_id] => 108
    )

[3] => Array
    (
        [activity_link_type] => PData
        [data_id] => 109
    )

[4] => Array
    (
        [activity_link_type] => PData
        [data_id] => 112
    )

[5] => Array
    (
        [activity_link_type] => PData
        [data_id] => 115
    )

[6] => Array
    (
        [activity_link_type] => Role
        [data_id] => 6
    )
)

我希望以最简单的方式对数组进行“重复数据删除”(无需执行多个嵌套数据库查询),因此它看起来像以下...

Array
(
[0] => Array
    (
        [activity_link_type] => Category
        [data_id] => 1
        [data_id] => 38
    )

[1] => Array
    (
        [activity_link_type] => PData
        [data_id] => 108
        [data_id] => 109
        [data_id] => 112
        [data_id] => 115
   
[2] => Array
    (
        [activity_link_type] => Role
        [data_id] => 6
    )
)

我尝试过array_merge()array_merge_recursivearray_unique(),但它们要么什么都不做,要么对数组的错误级别进行重复数据删除!

感谢所有帮助!

【问题讨论】:

  • Big, Well Huge Point 实际上 你想要的数组是不可能的!您不能在 assoc 数组中的同一级别上多次出现 data_id

标签: php arrays


【解决方案1】:

你认为你想要的数组是不可能的,但是这个怎么样,它相当接近并且还产生一个以activity_link_type作为键的数组,实际上在以后尝试访问这个数组时可能很有用

$from_db = [
            ['activity_link_type' => 'Category', 'data_id' => 1 ],
            ['activity_link_type' => 'Category', 'data_id' => 38 ],
            ['activity_link_type' => 'PData', 'data_id' => 108 ],
            ['activity_link_type' => 'PData', 'data_id' => 112 ],
            ['activity_link_type' => 'PData', 'data_id' => 115 ],
            ['activity_link_type' => 'Role', 'data_id' => 6 ]
];

$new = [];

foreach ( $from_db as $a){
    if ( isset( $new[$a['activity_link_type']] ) ) {
        $new[$a['activity_link_type']]['data_ids'][] = $a['data_id'];
    } else {
        $new[$a['activity_link_type']] = ['activity_link_type' => $a['activity_link_type'], 
                                          'data_ids' => [$a['data_id']] ];
    }   
}
print_r($new);

结果

Array
(
    [Category] => Array
        (
            [activity_link_type] => Category
            [data_ids] => Array
                (
                    [0] => 1
                    [1] => 38
                )
        )
    [PData] => Array
        (
            [activity_link_type] => PData
            [data_ids] => Array
                (
                    [0] => 108
                    [1] => 112
                    [2] => 115
                )
        )
    [Role] => Array
        (
            [activity_link_type] => Role
            [data_ids] => Array
                (
                    [0] => 6
                )
        )
)

【讨论】:

  • 完美,这就是我需要的。如果关联数组不可行,我会使用索引数组,但我想这可能会留下其他问题。
猜你喜欢
  • 1970-01-01
  • 2021-07-23
  • 2017-07-02
  • 1970-01-01
  • 1970-01-01
  • 2020-02-11
  • 2015-07-02
  • 2017-02-04
  • 1970-01-01
相关资源
最近更新 更多