簡體   English   中英

如何檢查特定鍵和值在php數組中是否存在3次以上

[英]How to check if a specific key and value exist more than 3 times in php array

我關注“挑戰”;

我有這樣的數組:

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個以上的事件。

我正在使用全日歷顯示事件。

我該如何實現?

先感謝您

在PHP 7中,您可以提取week_number屬性並計算值:

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

將產生week_number作為鍵,並產生count作為值:

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

根據您想要檢查的倍數還是僅檢查一個,循環並檢查> 3或使用in_array(3, $result)

您可以使用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是您的對象數組

如果您只需要檢查是否有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

您可以按周數對組進行排序,然后計算所有垂直組的長度

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM