Как проверить, существует ли конкретный ключ и значение более 3 раз в массиве php - PullRequest
0 голосов
/ 02 июля 2018

У меня следующий 'вызов';

У меня есть такой массив:

Array
(

[0] => stdClass Object
    (
        [id] => 94
        [day] => Monday
        [date] => 2018-07-09
        [week_number] => 2
    )

[1] => stdClass Object
    (
        [id] => 95
        [day] => Tuesday
        [date] => 2018-07-10
        [week_number] => 2
    )

[2] => stdClass Object
    (
        [id] => 83
        [day] => Saturday
        [date] => 2018-07-07
        [week_number] => 1
    )

[3] => stdClass Object
    (
        [id] => 82
        [day] => Friday
        [date] => 2018-07-06
        [week_number] => 1
    )

[4] => stdClass Object
    (
        [id] => 81
        [day] => Thursday
        [date] => 2018-07-05
        [week_number] => 1
    )

[5] => stdClass Object
    (
        [id] => 80
        [day] => Wednesday
        [date] => 2018-07-04
        [week_number] => 1
    )

)

Я хотел бы узнать, сколько раз пользователь выбирал «week_number» 1,2 и т. Д. Я не хочу, чтобы пользователь мог выбирать более 3 событий в неделю.

Я использую fullcalendar для отображения событий.

Как мне этого добиться?

Заранее спасибо

Ответы [ 4 ]

0 голосов
/ 02 июля 2018

Если вам нужно только проверить, существует ли больше чем x событий, и вам не нужно считать все события, лучше используйте что-то вроде этого:

function hasTooManySelections($items, $maxSelections = 3)
{
    $counts = [];

    foreach ($items as $item) {
        $counts[$item->week_number] = isset($counts[$item->week_number]) ? $counts[$item->week_number] + 1 : 1;

        if ($counts[$item->week_number] > $maxSelections) {
            return true;
        }
    }

    return false;
}

var_dump(hasTooManySelections($items));

Демо: https://3v4l.org/XbiH0

0 голосов
/ 02 июля 2018

В PHP 7 вы можете извлечь свойства week_number и посчитать значения:

$result = array_count_values(array_column($array, 'week_number'));

выдаст week_number в качестве ключа и счетчик в качестве значения:

array
(
       [1] => 4
       [2] => 2
)

В зависимости от того, хотите ли вы проверить множественность или только одну, зациклите и проверьте > 3 или используйте in_array(3, $result).

0 голосов
/ 02 июля 2018

Вы можете отсортировать ваш массив по группам по номеру недели, а затем посчитать длину всей перикулярной группы

0 голосов
/ 02 июля 2018

Вы можете использовать array_reduce для

$result = array_reduce($input, function($outpu, $item) {
    if(!isset($output[$item->week_number])) {
        $output[$item->week_number] = 0;
    }
    return $output[$item->week_number]++;
});

var_dump($result);

Где $input массив объектов You

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...