dongmiao4733 2017-06-01 18:20
浏览 119
已采纳

PHP根据日期创建数组

I'm trying to create an dynamic array sorted on date. Let me try to explain. I've the follow user array

    $users = [
        0 => [
            'user_id' => 1,
            'user_date' => '2017-04-26',
            'user_name' => 'test',
        ],
        1 => [
            'user_id' => 2,
            'user_date' => '2017-04-26',
            'user_name' => 'test 2',
        ],
        2 => [
            'user_id' => 3,
            'user_date' => '2017-04-28',
            'user_name' => 'test 3',
        ]
    ];

While looping throug this array a want to group the users that has the same date. An example how the output should look like

Array
(
    [0] => Array
        (
            [DATE] => 2017-04-26
            [USERS] => Array
                (
                    [0] => Array
                        (
                            [user_id] => 1
                            [user_title] => test
                        )

                    [1] => Array
                        (
                            [user_id] => 2
                            [user_title] => test 2
                        )

                )

        )

    [1] => Array
        (
            [DATE] => 2017-04-28
            [USERS] => Array
                (
                    [0] => Array
                        (
                            [user_id] => 4
                            [user_title] => test 4
                        )

                )

        )

)

I have tried to do some things in a foreach loop but could not make this get to work.

    $result = array();
    $i = 0;

    // Start loop
    foreach ($users as $user) {
        // CHECK IF DATE ALREADY EXISTS
        if(isset($result[$i]['DATE']) && $result[$i]['DATE'] == $user['user_date']){
            $i++;
        }

        // FILL THE ARRAY
        $result[$i] = [
            'DATE' => $user['user_date'],
            'USERS' => [
                'user_id' => $user['user_id'],
                'user_title' => $user['user_name'],
            ]
        ];
    }

I've changed it a little bit to this:

   foreach ($users as $user => $properties) {
        foreach ($properties as $property => $value) {
            if($property == 'user_date'){
                if(empty($result[$value])){
                    $result[$i] = [];
                }
                $result[$i][] = [
                    'user_id' => $properties['user_id'],
                    'user_name' => $properties['user_name'],
                ];

                $i++;
            }
        }
    }

But how could i change the start keys (dates) to numbers equal to 0, 1 etc.

  • 写回答

3条回答 默认 最新

  • dougang6178 2017-06-01 18:34
    关注

    If you want the exact output you showed (honestly, I like Ryan's answer better):

    $result = array();
    $i = 0;
    
    // Start loop
    foreach ($users as $user) {
        // CHECK IF DATE ALREADY EXISTS AND IS NOT IN THE SAME GROUP
        if (isset($result[$i]['DATE']) && $result[$i]['DATE'] != $user['user_date']){
            $i++;
        }
    
        // STARTING A NEW GROUP
        if(!isset($result[$i])) {
            $result[$i] = array(
                'DATE' => $user['user_date'],
                'USERS' => array()
            );
        }
    
    
        // FILL THE ARRAY (note the ending [] to add a new entry in this group's USERS array)
        $result[$i]['USERS'][] = array(
            'user_id' => $user['user_id'],
            'user_title' => $user['user_name'],
        );
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写
  • ¥20 Qcustomplot缩小曲线形状问题
  • ¥15 企业资源规划ERP沙盘模拟
  • ¥15 树莓派控制机械臂传输命令报错,显示摄像头不存在
  • ¥15 前端echarts坐标轴问题
  • ¥15 ad5933的I2C
  • ¥15 请问RTX4060的笔记本电脑可以训练yolov5模型吗?
  • ¥15 数学建模求思路及代码
  • ¥50 silvaco GaN HEMT有栅极场板的击穿电压仿真问题