Кратко пройдусь по выполненным заданиям. (За орфографические ошибки заранее извиняюсь.)
Я не знал насколько у меня есть доступ к так называемым данным, и может можно было бы сделать этот массив ассоциативным в начале, но с помощь метода array_reduce был сгруппирован новый массив(как раз таки он ассоциативный), и имеет примерно такой вид :$groupedData = [
[Иванов] =>
[
[Математика] =>
[
[0] => 5
...
],
[Физика] =>
[
[0] => 4
...
]
]...
в остальном там из работы с массивами это метод array_unique и array_column, для взятия уникальных данных предметов(второй параметр в array_column).
Результат выполнения первого задания
Исправление недочетов происходит по одному шаблонному запросу, а именно:DELETE FROM [название таблицы]
WHERE id NOT IN (
SELECT DISTINCT [id_столбца] FROM [таблица в которой находиться id_столбца] // здесь происходит поиск уникальных и вообще существующих данных
)
Результат выполнения второго задания
Подключение происходит через PDO(PHP Data Objects) как и во втором задании. Основная защита происходит через подготавительный запрос prepare, затем в bindParam значение переменной $comment привязывается к заполнителю :content, и в конце execute выполняет подготовленный запрос, где заполнители заменяются привязанными значениями.$stmt = $pdo->prepare('INSERT INTO comments (content) VALUES (:content)');
$stmt->bindParam(':content', $comment, PDO::PARAM_STR);
$stmt->execute();
так же небольшая защита поля ввода коментария от js скриптов в виде метода htmlspecialchars
Результат выполнения третьего задания
В начале с помощью метода preg_match_all разделяется текст на HTML-теги и слова. Затем проверка сколько слов в тексте и не меньше ли это кол-ва чем сколько нужно оставить(если да, то возвращается сразу весь текст) array_slice -ом оставляем нужное кол-во слов, implode -ом объединяем всё в строку и добовляем в конце многоточие и в основе всё. А ну и кроме того это функция, в которую можно помещать любой текст и нужно значения по оставлению слов.Результат выполнения четвёртого задания