doukong1391 2012-03-04 21:38
浏览 10
已采纳

重新排列数组以组合重叠结果

I'm using datetime to store dates of when new data is entered per provider. Using the following query to pull the results:

SELECT COUNT(id) AS addedCount,
date(date_added) AS dateAdded,
provider_name as provider 
FROM `table` WHERE `table`.`id` IN (SELECT `table`.`id` FROM `table` 
WHERE     `table`.`active` = '1') 

GROUP BY dateAdded
ORDER BY dateAdded DESC

The array looks like this:

array(1343) {
    [0]=>
    array(3) {
        ["addedCount"]=>
        string(1) "2"
        ["dateAdded"]=>
        string(10) "2012-03-03"
        ["provider"]=>
        string(5) "Provider_1"
    }
    [1]=>
    array(3) {
        ["addedCount"]=>
        string(1) "1"
        ["dateAdded"]=>
        string(10) "2012-03-03"
        ["provider"]=>
        string(5) "Provider_1"
   }
  [2]=>
  array(3) {
      ["addedCount"]=>
      string(1) "1"
      ["dateAdded"]=>
      string(10) "2012-03-03"
      ["provider"]=>
      string(5) "Provider_2"
   }
  [3]=>
  array(3) {
      ["addedCount"]=>
      string(1) "1"
      ["dateAdded"]=>
      string(10) "2012-03-03"
      ["provider"]=>
      string(5) "Provider_2"

I need the results to count the total of "addedCount" where "dateAdded" and "provider" match so that the final array looks like:

addedCount  dateAdded   provider
3           2012-03-03  provider_1
2           2012-03-03  provider_2

I've tried tirelessly searching SO and rebuilding the arrays, but after many hours spent, I ended up rebuilding the array in its original form,

Thank you in advance!

  • 写回答

1条回答 默认 最新

  • dongpangzan6425 2012-03-04 22:05
    关注

    You can use the data as indexe in order to group similar data for example:

    $groupArray = array();
    foreach ( $providerArr as $provider )
    {
        // Using the grouping info (date & name) as a key to our grouping array
    
        $key = $provider[ 'dateAdded' ] . $provider[ 'provider' ];
        if ( !isset( $groupArray[ $key ] ) )
        {
            // Our grouping array does not have the specific combination of date & name yet
            // so save the first occurance of data for this combination.
    
            $groupArray[ $key ] = $provider;
        }
        else
        {
            // The unique combination of date & name already exists so just update the count
    
            $groupArray[ $key ][ 'addedCount' ] += $provider[ 'addedCount' ];
        }
    }
    
    // Now print
    
    foreach ( $groupArray as $data )
    {
        echo( "{$data[ 'addedCount' ]} - {$data[ 'dateAdded'} - {$data[ '$provider' ]}<br/>" );
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度