in_array()
проверяет значение, а не ключ.
Используйте array_key_exists()
, если хотите проверить ключ:
<input type="checkbox" name="services[]" value="<?php echo $key; ?>" id="service<?php echo $key; ?>"<?php if( array_key_exists($key, $services) ) { echo ' checked="checked"'; } ?> />
Когда вы открываете форму в первый раз, ваш $_POST['services']
будет пустым. Чтобы устранить ошибку, инициализируйте пустой массив, если из сообщения ничего не приходит:
$services = is_array($_POST['services') && count($_POST['services']) > 0 ? $_POST['services'] : array();