2 回答

TA貢獻(xiàn)1830條經(jīng)驗 獲得超9個贊
您可以在 的一次迭代$users和一次迭代中執(zhí)行此操作$subscriptions,而不是$subscriptions在 中的每行一次迭代$users。隨著行數(shù)的增加,這可能會帶來顯著的性能改進(jìn)。
首先,構(gòu)建一個由 user_id 索引的用戶注冊日期的關(guān)聯(lián)數(shù)組,這樣您就不需要在每次需要查找日期時對其進(jìn)行迭代:
$userDates = [];
foreach ($users as $user) {
$userDates[$user['user_id']] = date('Y-m-d', strtotime($user['sign_up_date']);
}
這會給你:
Array
(
[1] => 2020-01-01
[2] => 2020-01-02
[3] => 2020-01-03
)
然后只需遍歷訂閱一次,隨時查找該用戶的注冊日期:
foreach ($subscriptions as $subscription) {
if (
date('Y-m-d', strtotime($subscription['sign_up_date'])) ===
$userDates[$subscription['user_id']]
) {
...
}
}
或者可能是這樣的:
array_unique(array_filter(
$subscriptions,
function ($subscription) use ($userDates) {
return date('Y-m-d', strtotime($subscription['sign_up_date'])) ===
$userDates[$subscription['user_id']];
}
));

TA貢獻(xiàn)1936條經(jīng)驗 獲得超7個贊
我要做的第一個想法是修改您的數(shù)組,以便通過鍵識別用戶(這是前兩行)。第三行將每個用戶的訂閱日期減少到最早,然后第四行查找注冊日期和最早訂閱日期匹配的地方。
foreach( $users as $u ) { $signups[$u['user_id']] = date('Y-m-d', strtotime($u['sign_up_date']) ); }
foreach( $subscriptions as $s ) { $subs[$s['user_id']][] = date('Y-m-d', strtotime($s['sign_up_date']) ); }
foreach( $subs as $key => $value ) { $subs[$key] = min( $subs[$key] ); }
$results = array_keys( array_intersect_assoc( $signups, $subs ) );
- 2 回答
- 0 關(guān)注
- 118 瀏覽
添加回答
舉報