[英]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.