Почему PHP принимает только 1000 значений

Если вы попытаетесь отправить на обработку PHP с соответствующими настройками по умолчанию более 1000 значений, то будет обработана только именно тысяча, а остальные проигнорируются, при этом появится следующее предупреждение: Warning: Unknown: Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini. in Unknown on line 0

Под одним значением подразумевается одна GET- / POST-переменная или один элемент массива.

Это говорит о том, что превышено допустимое количество входящих переменных, так как по умолчанию для директивы max_input_vars, отвечающей за это, установлено значение 1000. Сделано это для снижения вероятности сбоев в случае атак с использованием хеш-коллизий, как сказано на официальном сайте.

Если вам нужно увеличить количество обрабатываемых значений, то установите в php.ini соответствующую запись:

max_input_vars = число

Код для тестов

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Thousand vars test</title>
	</head>
	<body>
		<h1>Thousand vars test</h1>
		<a href="<?= $_SERVER['SCRIPT_NAME']; ?>">Reload</a>
		<form method="post">
			<?php
				for ( $i = 1; $i <=1001 ; $i++ ) {
					echo '<input type="checkbox" name="thousand[]" checked="checked" value="' . $i . '">';
				}
			?>
			<input type="submit" value="GO">
		</form>
		<?php print_r( $_POST ); ?>
	</body>
</html>