我对 PHP 中所有不同的数组函数感到非常困惑,我不知道在我的场景中哪个最适合使用。
我有一个列出用户注册的数组和一个列出这些用户的订阅以及用户订阅日期的数组。用户可以有多个订阅,也可以根本没有。一个例子是:
$users = [
['user_id' => 1, 'sign_up_date' => '2020-01-01 00:00:00'],
['user_id' => 2, 'sign_up_date' => '2020-01-02 00:00:00'],
['user_id' => 3, 'sign_up_date' => '2020-01-03 00:00:00'],
...
];
$subscriptions = [
['user_id' => 1, 'subscription_category' => 'abc', 'sign_up_date' => '2020-01-01 00:01:00'],
['user_id' => 1, 'subscription_category' => 'def', 'sign_up_date' => '2020-01-01 00:02:00'],
['user_id' => 1, 'subscription_category' => 'ghi', 'sign_up_date' => '2020-01-02 00:03:00'],
['user_id' => 2, 'subscription_category' => 'jkl', 'sign_up_date' => '2020-01-02 00:01:00'],
['user_id' => 2, 'subscription_category' => 'mno', 'sign_up_date' => '2020-01-03 00:02:00'],
...
];
我试图找到的是哪些用户在他们的注册日期订阅了任何类别。所以在这种情况下,我想找到以下项目的数量:
$usersWhoSubscribedOnSignUpDate = [1, 2];
我能做的是:
$results = [];
foreach ($users as $user) {
foreach ($subscriptions as $subscription) {
$signUpDate = date('Y-m-d', strtotime($user['sign_up_date']));
$subscriptionDate = date('Y-m-d', strtotime($subscription['sign_up_date']));
if ($subscription['user_id'] === $subscription['user_id'] && $signUpDate === $subscriptionDate) {
$results[] = subscription['user_id'];
}
}
}
$results = array_unique($results);
但这在我看来不是很优雅,我相信许多 PHP 数组函数中的一个可以以某种方式简化这个过程。
array_intersect似乎不合适,因为它似乎不适用于这样的多级数组。
array_map似乎不合适,因为它没有比较两个数组的能力。
array_uintersect_assoc似乎它可能是一个选项,但我无法理解“附加索引检查”的含义或如何对数据进行排序。我相信回调函数需要返回两个对象之间的比较,所以也许这可以按sign_up_date属性的时间戳排序?
慕标琳琳
LEATH