Как отфильтровать массив объектов и проверить последнюю отметку времени - PullRequest
0 голосов
/ 05 апреля 2019

Я хочу создать ограничение после действия для разных идентификаторов, поэтому я решил сохранить время входа и идентификатор сообщения в переменную сеанса. Затем я могу получить недавнюю временную метку и запретить пользователю выполнять это действие с идентификатором в течение 5 минут, чтобы остановить спам запросов

$vars = (object) array("idpost" => $idpost,"time" => time());
$_SESSION['ids'][] = $vars;

А если количество массивов больше 5, то остановить выполнение скрипта. Но через 5 минут продолжить сценарий.

$neededObject = array_filter( //filtering the array for a specific idpost
    $_SESSION['ids'],
    function ($e) use ($idpost) {
        return $e->idpost === $idpost;
    }
);
if (count($neededObject) > 5){// user has used id it many times
   $timestamps = array_filter(
    $neededObject,
    function ($e) use ($idpost) {
        return $e->timestamp // do something here to check the recent timestamps from all others;
    }
}

Я не могу найти способ сравнить последнюю отметку времени и проверить, прошло ли 5 ​​минут. Как я могу получить самую последнюю временную метку и проверить, что прошло 5 минут? Я могу сделать это, если я получу самую последнюю метку времени из массива.

if (time() - $mostrecenttimestampfromarray < 5*60*60 ) // 5 mins have passed

1 Ответ

0 голосов
/ 05 апреля 2019

Я не уверен, что вы пытаетесь достичь с помощью array_filter, это необходимо?

Можете ли вы пройтись по нужным объектам, чтобы найти последнюю отметку времени, а затем проверить ее.Как то так:

if ( count( $neededObject ) > 5 ) {

    $latestTimestamp = 0;

    foreach ( $neededObject as $object ) {

        if ( $object->time > $latestTimestamp ) {
            $latestTimestamp = $object->time;
        }       
    }

    if ( time() < $latestTimestamp + 5*60 ) {
        return;
    }   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...