解决方案 »

  1.   

    还有这逻辑 我表示我凌乱了 3月9号注册人数为零,所以这一天的uid都为空,所以在登录日志表里是无论如何也找不到3月9号的次日留存数的。
      

  2.   

    可以这样写//注册信息
    $array1 = array(
    0=>array(
    'day'=>'2014-3-7',//注册日期
    'data'=>array(
    0=>array('uid'=>'0000001'),
    1=>array('uid'=>'0000002'),
    3=>array('uid'=>'0000003'),
    4=>array('uid'=>'0000004'),
    )
    ),
    1=>array(
    'day'=>'2014-3-8',//注册日期
    'data'=>array(
    0=>array('uid'=>'0000005'),
    1=>array('uid'=>'0000007'),
    2=>array('uid'=>'0000006'),
    )
    ),
    2=>array(
    'day'=>'2014-3-10',//注册日期
    'data'=>array(
    0=>array('uid'=>'0000008'),
    1=>array('uid'=>'0000010'),
    2=>array('uid'=>'0000009'),
    3=>array('uid'=>'0000012'),
    4=>array('uid'=>'0000013'),
    )
    ),
    3=>array(
    'day'=>'2014-3-11',//注册日期
    'data'=>array(
    0=>array('uid'=>'0000015'),
    1=>array('uid'=>'0000014'),
    2=>array('uid'=>'0000025'),
    3=>array('uid'=>'0000017'),
    4=>array('uid'=>'0000018'),
    )
    ),
    );
     
    //登录日志
    $array2 = array(
    0=>array(
    'day'=>'2014-3-8',//登录日期
    'ge_data'=>array(
    0=>array('uid'=>'0000001'),
    1=>array('uid'=>'0000002'),
    3=>array('uid'=>'0000003')
    )
    ),
    1=>array(
    'day'=>'2014-3-9',//登录日期
    'ge_data'=>array(
    0=>array('uid'=>'0000002'),
    1=>array('uid'=>'0000007'),
    2=>array('uid'=>'0000006'),
    )
    ),
    2=>array(
    'day'=>'2014-3-11',//登录日期
    'ge_data'=>array(
    0=>array('uid'=>'0000001'),
    1=>array('uid'=>'0000007'),
    2=>array('uid'=>'0000008'),
    3=>array('uid'=>'0000012'),
    4=>array('uid'=>'0000013'),
    5=>array('uid'=>'0000003'),
    6=>array('uid'=>'0000002')
    )
    )
    );$res = array();//读取每天的注册记录
    foreach($array1 as $r) {
      $day = $r['day'];
      $res[$day] = array('day' => $day, 'count' => count($r['data']));
      $d = date('z', strtotime($day));  //对于当日注册每个用户
      foreach($r['data'] as $us) {
        foreach($array2 as $t) {
          $rd = date('z', strtotime($t['day']));
          //检查他在哪天登录了
          foreach($t['ge_data'] as $u) {
            if($us['uid'] == $u['uid']) $res[$day]['day_'.($rd-$d)][] = $us['uid']; //保存登录的uid以便于检查
          }
        }
      }
    }
    print_r($res);Array
    (
        [2014-3-7] => Array
            (
                [day] => 2014-3-7
                [count] => 4
                [day_1] => Array
                    (
                        [0] => 0000001
                        [1] => 0000002
                        [2] => 0000003
                    )            [day_4] => Array
                    (
                        [0] => 0000001
                        [1] => 0000002
                        [2] => 0000003
                    )            [day_2] => Array
                    (
                        [0] => 0000002
                    )        )    [2014-3-8] => Array
            (
                [day] => 2014-3-8
                [count] => 3
                [day_1] => Array
                    (
                        [0] => 0000007
                        [1] => 0000006
                    )            [day_3] => Array
                    (
                        [0] => 0000007
                    )        )    [2014-3-10] => Array
            (
                [day] => 2014-3-10
                [count] => 5
                [day_1] => Array
                    (
                        [0] => 0000008
                        [1] => 0000012
                        [2] => 0000013
                    )        )    [2014-3-11] => Array
            (
                [day] => 2014-3-11
                [count] => 5
            ))遗憾的是根据你的数据,不能得到你示例的结果
    应该是你弄错了
      

  3.   

    既然是从数据库读出来的。。我觉得还是改进下sql语句好一点。。你查完了再修改数组有点舍近求远
      

  4.   

    这个是从mongodb数据集里读出来的!要是mysql还好呢!我就不用这么费劲了!
      

  5.   

    3月7日里注册的UID有:0000001,0000002,0000003,0000004
    3月8日登录的UID有:0000001,0000002,0000003
    3月9日登录的UID有:0000002,0000006,0000007
    所以针对3月7日,他的第二天也就是3月9日登录的UID只有一个0000002
    以下都依次类推
      

  6.   

    3月7日里注册的UID有:0000001,0000002,0000003,0000004
    3月8日登录的UID有:0000001,0000002,0000003
    3月9日登录的UID有:0000002,0000006,0000007
    所以针对3月7日,他的第二天也就是3月9日登录的UID只有一个0000002
    以下都依次类推写错了,是第三天也就是3月9日
      

  7.   

    所以应该是
        [2014-3-7] => Array
            (
                [day] => 2014-3-7
                [count] => 4
                [day_1] => Array
                    (
                        [0] => 0000001
                        [1] => 0000002
                        [2] => 0000003
                    )
     
                [day_4] => Array
                    (
                        [0] => 0000001
                        [1] => 0000002
                        [2] => 0000003
                    )
     
                [day_2] => Array
                    (
                        [0] => 0000002
                    )
             )即
    第二天 3 个
    第三天 1 个
    第五天 3 个
    而绝没有第四天的2 个!
      

  8.   

    我在想,把你那个数组,再处理一下变成我要的数组。$array = array(
        '2014-3-7' => array(
            'day' => '2014-3-7',
            'count' => 4,
            'day_1' => array(
                0 => 0000001,
                1 => 0000002,
                2 => 0000003
            ) ,
            'day_4' => array(
                0 => 0000001,
                1 => 0000002,
                2 => 0000003
            ) ,
            'day_3' => array(
                0 => 0000001,
                1 => 0000002
            ) ,
            'day_2' => array(
                0 => 0000002
            ) ,
            'day_5' => array(
                0 => 0000002
            )
        ) ,
        '2014-3-8' => array(
            'day' => '2014-3-8',
            'count' => 3,
            'day_4' => array(
                0 => 0000005,
                1 => 0000007
            ) ,
            'day_2' => array(
                0 => 0000005,
                1 => 0000007,
                2 => 0000006
            ) ,
            'day_1' => array(
                0 => 0000007,
                1 => 0000006
            ) ,
            'day_3' => array(
                0 => 0000007,
                1 => 0000006
            )
        ) ,
        '2014-3-10' => array(
            'day' => '2014-3-10',
            'count' => 5,
            'day_1' => array(
                0 => 0000008,
                1 => 0000012,
                2 => 0000013
            ) ,
            'day_2' => array(
                0 => 0000008,
                1 => 0000010,
                2 => 0000012,
                3 => 0000013
            )
        ) ,
        '2014-3-11' => array(
            'day' => '2014-3-11',
            'count' => 5,
            'day_1' => array(
                0 => 0000015,
                1 => 0000025,
                2 => 0000018
            )
        )
    );
      

  9.   

    这有什么可想的?
    $res[$day]['day_'.($rd-$d)][] = $us['uid'];
    改成
    $res[$day]['day_'.($rd-$d)]++;
    不就是计数了吗?
      

  10.   

    $d = date('z', strtotime($day));这个是什么意思?
      

  11.   

    $d = date('z', strtotime($day));
    中:
    $day 是数组提供的 日期串
    strtotime($day) 将日期串转换为unix时间戳
    date('z', strtotime($day)) 取得日期是在一年中的第几天
      

  12.   

    为什么我换一组数据,会出现:[day_0] => Array
                    (
                        [0] => 3001000
                        [1] => 3001726
                        [2] => 3001728
                        [3] => 3001733
                        [4] => 3001734
                        [5] => 3001735
                        [6] => 3001745
                    )这个是怎么回事?
      

  13.   

    注册信息($array1)和登录信息($array2)时间(day)相同时,就会出现 day_0