php - 使用 SQL 和 Codeigniter 返回 4 维数组

标签 php mysql arrays codeigniter multidimensional-array

我需要进行查询并获取某种类型的数据。我有 2 个表、用户和连接,我需要获取每个用户每月和每年连接的次数。

users             connections
...........    ................
john              10/02/2014
john              15/02/2014
john              03/01/2015
john              06/02/2015

是否有机会以这种格式获取此信息:

 john=>
   [0]=>2014
     [0]=>02
       'total' =>2
   [1]=>2015
     [0]=>01
       'total' => 1
     [1]=>02
       'total' => 2
     [2]=>03
       'total'=> 1 

我正在使用 Codeigniter 和 PHP。

回答 @CodeGodie 到目前为止我所做的是:

public function getPeriodicity(){
    $this->db->select('u.vusr_user, extract (MONTH from (to_timestamp(c.vuc_log_in))) as month, extract (YEAR from (to_timestamp(c.vuc_log_in))) as yearly, COUNT(c.vuc_log_in)');
    $this->db->from('vts_users_conn c');
    $this->db->join('vts_users u', 'c.vuc_vusr_id = u.vusr_id');
    $this->db->group_by('u.vusr_user, month, yearly','asc');
    $query = $this->db->get();
    return $query->result_array();
  }

最佳答案

假设您使用 Codeigniter 的 $this->db->result_array() 来获取数据库结果,您的初始数组将如下所示:

$res = array(
    array(
        "name" => "john",
        "date" => "10/02/2014"
    ),
    array(
        "name" => "john",
        "date" => "15/02/2014"
    ),
    array(
        "name" => "john",
        "date" => "03/01/2015"
    ),
    array(
        "name" => "john",
        "date" => "06/02/2015"
    ),
    array(
        "name" => "john",
        "date" => "06/03/2015"
    )
);

为了将此数组更改为您想要的输出,我将执行以下操作:

foreach ($res as $row) {
    $date_arr = explode("/", $row['date']);
    $n = $row['name'];
    $y = $date_arr[2];
    $m = $date_arr[1];

    if (!isset($final[$n]))
        $final[$n] = array();

    if (!isset($final[$n][$y]))
        $final[$n][$y] = array();

    if (!isset($final[$n][$y][$m])) {
        $final[$n][$y][$m] = array("total" => 1);
    } else {
        $final[$n][$y][$m]["total"] = $final[$n][$y][$m]["total"] + 1;
    }
}

如果您 var_dump 最终结果 (var_dump($final)),您将得到以下结果:

array (size=1)
  'john' => 
    array (size=2)
      2014 => 
        array (size=1)
          '02' => 
            array (size=1)
              'total' => int 2
      2015 => 
        array (size=3)
          '01' => 
            array (size=1)
              'total' => int 1
          '02' => 
            array (size=1)
              'total' => int 1
          '03' => 
            array (size=1)
              'total' => int 1

希望这有帮助。

关于php - 使用 SQL 和 Codeigniter 返回 4 维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31297257/

相关文章:

php - 客户端与服务器端

php - 尝试从 mysql 的 2 个表中获取数据以显示在 php 中

mysql - 在 $wpdb 查询中使用 INNER JOIN

javascript - 如何先按数字排序,再按字母顺序排序

arrays - 在 Ruby 中从整数除法生成数组的正确方法

php - 反向图像存档 : stacking images from bottom to top with CSS/Javascript?

php - Laravel 路由组匹配整个域

javascript - Ajax 不返回数据

mysql - 数据库用户表设计,针对特定场景

php - 在 PHP 中,有没有办法获取其键与另一个数组中的值匹配的数组的子集?