首页 > 解决方案 > 如何根据日期和 id 过滤掉 PHP 数组中的数据?

问题描述

我这里有一个用户数组,该数组有超过 2 个用户,每个用户数组都有一个registration_date、licence_expiry_date、性别、电子邮件、年龄和姓名。

数组看起来像这样。

$Users = Array(
                    (0) => Array
                        (
                            (id) => '100',
                            (name) => 'Name & Surname',
                            (email) => 'email@email.com',
                            (age) => '25',
                            (gender) => 'male',
                            (registration_date) => '2019-01-03',
                            (licence_expiry_date) => '2019-09-03',
                        ),

                    (1) => Array
                        (
                            (id) => '101',
                            (name) => 'Name & Surname 1',
                            (email) => 'email1@email.com',
                            (age) => '22',
                            (gender) => 'male',
                            (registration_date) => '2019-03-03',
                            (licence_expiry_date) => '2019-02-03',
                        ),

                    (2) => Array
                        (
                            (id) => '102',
                            (name) => 'Name & Surname 1',
                            (email) => 'email1@email.com',
                            (age) => '25',
                            (gender) => 'male',
                            (registration_date) => '2019-01-03',
                            (licence_expiry_date) => '2019-09-03',
                        ),

                    (3) => Array
                        (
                            (id) => '103',
                            (name) => 'Name & Surname 3',
                            (email) => 'email3@email.com',
                            (age) => '25',
                            (gender) => 'male',
                            (registration_date) => '2019-08-03',
                            (licence_expiry_date) => '2019-10-03',
                        ),

                    (4) => Array
                        (
                            (id) => '103',
                            (name) => 'Name & Surname 4',
                            (email) => 'email4@email.com',
                            (age) => '18',
                            (gender) => 'female',
                            (registration_date) => '2018-01-03',
                            (licence_expiry_date) => '2019-12-03',
                        ),
                );

我想要实现的是将其中的数据过滤到另一个数组但有一些条件。例如,我想将此过滤到仅年龄为 25 岁且 registration_date 在 2019-01-01 之后和 licence_expiry_date 在 2019-10-01 之前的用户。

预期结果将如下所示

$UsersFiltered = Array(
                    (0) => Array
                        (
                            (id) => '100',
                            (name) => 'Name & Surname',
                            (email) => 'email@email.com',
                            (age) => '25',
                            (gender) => 'male',
                            (registration_date) => '2019-01-03',
                            (licence_expiry_date) => '2019-09-03',
                        ),


                    (2) => Array
                        (
                            (id) => '102',
                            (name) => 'Name & Surname 1',
                            (email) => 'email1@email.com',
                            (age) => '25',
                            (gender) => 'male',
                            (registration_date) => '2019-01-03',
                            (licence_expiry_date) => '2019-09-03',
                        ),


                );

标签: phparrays

解决方案


您可以使用array_filter

$UsersFiltered = array_filter($Users, function ($v) {
    return $v['age'] == 25 &&
           $v['registration_date'] > '2019-01-01' && 
           $v['licence_expiry_date'] < '2019-10-01';
});

请注意,由于您的日期采用YYYY-MM-DD格式,它们可以按字母顺序进行比较,而无需转换为DateTime对象、时间戳或类似内容。

3v4l.org 上的演示


推荐阅读