Если Вы НЕ отметили ни одного чек-бокса, то Вам ничего и не прилетит.
Т.е. если отправить форму из моего примера, в $_POST будет:
array(2) {
["a"]=>
string(1) "0"
["b"]=>
string(1) "5"
}
Т.е. никакого day у Вас и нет.
Я так понимаю, Вы делаете вывод данных на основе значения этого day. А значит ничего не и должно вывестись.
То есть, Ваш код сведется к:
$result = [];
$a = (int) $_POST['a'];
$b = (int) $_POST['b'];
$c = array_filter( (array) $_POST['day'] );
if ( !empty($c) )
{
$c = implode(',', $_POST['day']);
$in = str_repeat('?,', count($c) - 1) . '?';
$sql = "SELECT * FROM table WHERE day IN ($in) ASC LIMIT :a, :b";
$stmt = $pdo->prepare($sql);
$stmt->execute($с, [$a, $b]);
$data = $stmt->fetchAll();
$result = $data;
}
echo json_encode($result);
P.S. А так ли Вам нужна именно ручная сборка значений? Почему бы не вынести в саму форму?
<form id="filter">
<input type='hidden' name='a' value='0' />
<input type='hidden' name='b' value='5' />
<input type="checkbox" name="day[]" value="1">
<input type="checkbox" name="day[]" value="2">
<input type="checkbox" name="day[]" value="3">
</form>
$.ajax({
url: 'index.php',
method: 'POST',
data: $("#filter").serialize()
});