如何检查特定的键和值在php数组中是否存在超过3次

如何检查特定的键和值在php数组中是否存在超过3次,php,arrays,sorting,Php,Arrays,Sorting,我有以下‘挑战’ 我有这样的数组: Array ( [0] => stdClass Object ( [id] => 94 [day] => Monday [date] => 2018-07-09 [week_number] => 2 ) [1] => stdClass Object ( [id] => 95 [day] =>

我有以下‘挑战’

我有这样的数组:

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
    )

)
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));
我想知道用户选择“week_number”1、2等的次数,我不想允许用户在一周内选择3个以上的事件

我正在使用fullcalendar显示事件

我怎样才能做到这一点


提前谢谢

您可以使用
数组\u 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
是对象数组

在PHP 7中,您可以提取
周数
属性并计算值:

$result = array_count_values(array_column($array, 'week_number'));
将产生
周数
作为键,计数作为值:

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

根据您是要检查多个还是仅检查一个,循环并检查
>3
,或者在数组中使用
(3,$result)
您可以按周数对数组进行排序,然后计算所有特定组的长度如果您只需要检查是否有超过x个事件,您不需要计算所有事件,最好使用以下内容:

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
    )

)
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));

演示:

获得最多赞成票的可靠答案(未被接受)你放弃了吗?到目前为止你做了哪些研究或尝试?检查每一条数据,并检查其周数。记下每周数字出现的次数。如果超过任何给定周数的阈值,则使提交无效。逻辑不是太难…输入是对象数组而不是数组数组。@Pyton:我知道,如上所述,在PHP7中,您可以