【问题标题】:How to filter unique array and add up the duplicates ones in php?如何过滤唯一数组并在php中添加重复的数组?
【发布时间】:2022-01-07 13:38:02
【问题描述】:

它来自 API,所以我没有任何控制权

在得到这个结果之前我已经使用了 json_decode($response, true)-

Array
    (
        [0] => Array
            (
                [status] => ok
                [res] => Array
                    (
                        [0] => Array
                            (
                                [id] => C_6
                                [image_url] => https://www.example.com/pic.png
                                [cat_id] => F_1
                                [cat_name] => Sea Food
                                [date] => 2020-11-09 22:02:56
                            )
    
                        [1] => Array
                            (
                                [id] => C_6
                                [image_url] => https://www.example.com/pic1.png
                                [cat_id] => F_1
                                [cat_name] => Sea Food
                                [date] => 2020-11-09 12:12:20
                            )
    
                        [2] => Array
                            (
                                [id] => C_6
                                [image_url] => https://www.example.com/pic2.png
                                [cat_id] => F_2
                                [cat_name] => European Dish
                                [date] => 2020-11-09 20:05:62
                            )
             )
    
                [none] => 
            )
    
    )

现在我想根据这个元素 [date] 过滤基于唯一性的结果,并且只有我希望所有结果都应该是唯一的日期并且重复值应该像这样加起来-

有 2 个“海鲜”,日期相同,但时间戳不同(我发现要爆炸并仅从中取出日期)

但如果同一类别的日期相同(就像海鲜一样),我只想认为它是重复的 如果在任何情况下有 3 个数组有 2 个相同的日期和 1 个不同的日期但相同的类别,那么它将是 2~1st date 和 1~2nd date

Sea Food-2020-11-09 + Sea Food-2020-11-09 = 2 Sea Food-2020-11-09

所以总的来说是:- 2份海鲜,1份欧洲菜

【问题讨论】:

  • 你从哪里得到这个结果,是数据库记录导致你可能考虑更新你的查询来为你完成这项工作吗?

标签: php arrays json object


【解决方案1】:

可能不是优化的解决方案,但如果我了解您的需要,请试试这个:

$data = [
    [
        'id' => 'C_6',
        'cat_id' => 'F_1',
        'cat_name' => 'Seafood',
        'date' => '2020-11-09 22:02:56',
    ],
    [
        'id' => 'C_7',
        'cat_id' => 'F_1',
        'cat_name' => 'Seafood',
        'date' => '2020-11-09 22:02:50',
    ],
    [
        'id' => 'C_9',
        'cat_id' => 'F_8',
        'cat_name' => 'Tacos',
        'date' => '2020-11-09 22:02:50',
    ],
    [
        'id' => 'C_6',
        'cat_id' => 'F_6',
        'cat_name' => 'Europe',
        'date' => '2020-12-09 20:05:56',
    ],
];
$days = [];
$result = [];
//loop over all your data
foreach($data as $item) {
    //keep only your date
    $date = DateTime::createFromFormat('Y-m-d H:i:s', $item['date']);
    $category = $item['cat_id'];
    $cat_name = $item['cat_name'];
    $day = $date->format('Y-m-d');
    //better to use the category id instead of a string, IMO
    //but depends on your data structure
//    $days[$day][$category][] = $item;
    $days[$day][$cat_name][] = $item;
}

foreach($days as $date => $item) {
    foreach($item as $cat_name => $value) {
        $result[] = count($value) . " $cat_name on " . $day;
    }
}

结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-19
    • 2020-09-29
    • 2020-03-05
    • 2017-09-08
    • 2016-11-07
    • 1970-01-01
    • 2016-12-30
    • 2016-12-20
    相关资源
    最近更新 更多