Last active
September 25, 2019 09:25
-
-
Save EvgenyOrekhov/3e1526bfa8409c0f84e9 to your computer and use it in GitHub Desktop.
PHP test tasks
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* # Работа с DOM | |
* | |
* Написать скрипт закачивания страницы www.bills.ru, из страницы извлечь даты, | |
* заголовки, ссылки в блоке "события на долговом рынке", сохранить в таблицу | |
* bills_ru_events, имеющую такую структуру: | |
* * id — целое, автоинкрементарное | |
* * date — в формате год-месяц-день часы:минуты:секунды | |
* * title — строковое, не более 230 символов | |
* * url — строковое, не более 240 символов, уникальное | |
* | |
* Вывести таблицу на экран. | |
*/ | |
libxml_use_internal_errors(true); | |
$html = file_get_contents('http://bills.ru'); | |
$document = new DOMDocument(); | |
$document->loadHTML($html); | |
$news = $document->getElementById('bizon_api_news_list'); | |
$dates = []; | |
$urls = []; | |
$titles = []; | |
$months = [ | |
'янв' => 'Jan', | |
'фев' => 'Feb', | |
'мар' => 'Mar', | |
'апр' => 'Apr', | |
'мая' => 'May', | |
'июн' => 'Jun', | |
'июл' => 'Jul', | |
'авг' => 'Aug', | |
'сен' => 'Sep', | |
'окт' => 'Oct', | |
'ноя' => 'Nov', | |
'дек' => 'Dec', | |
]; | |
foreach ($news->childNodes as $child) { | |
$nodeValue = trim($child->childNodes->item(0)->nodeValue); | |
$date = str_ireplace( | |
array_keys($months), | |
array_values($months), | |
$nodeValue | |
); | |
if (strlen($date) < 11) { | |
$date .= ' ' . date('Y'); | |
} | |
$timestamp = strtotime($date); | |
$dates[] = date('Y-m-d H:i:s', $timestamp); | |
} | |
foreach ($news->getElementsByTagName('a') as $link) { | |
$urls[] = $link->getAttribute('href'); | |
$titles[] = $link->nodeValue; | |
} | |
$host = 'localhost'; | |
$dbName = 'tasks'; | |
$tableName = 'bills_ru_events'; | |
$user = 'root'; | |
$pass = 'root'; | |
try { | |
$dbh = new PDO("mysql:host=$host", $user, $pass); | |
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); | |
$dbh->exec( | |
"CREATE DATABASE IF NOT EXISTS $dbName | |
DEFAULT CHARACTER SET utf8 | |
DEFAULT COLLATE utf8_general_ci;" | |
); | |
$dbh->exec("use $dbName;"); | |
$dbh->exec( | |
"CREATE TABLE IF NOT EXISTS $tableName ( | |
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, | |
date DATETIME NOT NULL, | |
title VARCHAR(230) NOT NULL, | |
url VARCHAR(240) NOT NULL UNIQUE | |
);" | |
); | |
foreach ($urls as $key => $value) { | |
$sth = $dbh->prepare( | |
"INSERT IGNORE INTO $tableName | |
(date, title, url) | |
VALUES (:date, :title, :url);" | |
); | |
$sth->bindParam(':date', $dates[$key]); | |
$sth->bindParam(':title', $titles[$key]); | |
$sth->bindParam(':url', $urls[$key]); | |
$sth->execute(); | |
} | |
$sth = $dbh->query("SELECT * FROM $tableName;"); | |
$sth->setFetchMode(PDO::FETCH_ASSOC); | |
$result = $sth->fetchAll(); | |
$dbh = null; | |
} catch (PDOException $e) { | |
echo $e->getMessage(); | |
} | |
echo '<table border="1">'; | |
foreach ($result as $record) { | |
echo '<tr>'; | |
foreach ($record as $field) { | |
echo "<td>{$field}</td>"; | |
} | |
echo '</tr>'; | |
} | |
echo '</table>'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* # Файловая система и регулярные выражения | |
* | |
* Создать скрипт, который в папке datafiles найдет все файлы, имена которых | |
* состоят из цифр и букв латинского алфавита и имеют расширение ixt, и выведет | |
* на экран имена этих файлов, упорядоченных по имени. | |
* | |
* Задание должно быть выполнено с использованием регулярных выражений. | |
*/ | |
$allFiles = scandir('datafiles'); | |
$files = array_filter($allFiles, function ($file) { | |
return preg_match('/^[0-9a-z]+\.ixt$/i', $file); | |
}); | |
foreach ($files as $file) { | |
echo $file . '<br>'; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* # Счётчик посещений | |
* | |
* Создать скрипт, который выводит количество уникальных посетителей | |
* (visitors), заходов (visits) и обращений к нему (hits). | |
* | |
* Данные хранить в реляционной базе данных. | |
*/ | |
session_start(); | |
$host = 'localhost'; | |
$dsn = "mysql:host=$host"; | |
$username = 'root'; | |
$password = 'root'; | |
$dbName = 'tasks'; | |
$tableName = 'hits'; | |
try { | |
$dbh = new PDO($dsn, $username, $password); | |
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); | |
$dbh->exec( | |
"CREATE DATABASE IF NOT EXISTS $dbName | |
DEFAULT CHARACTER SET utf8 | |
DEFAULT COLLATE utf8_general_ci;" | |
); | |
$dbh->exec("use $dbName;"); | |
$dbh->exec( | |
"CREATE TABLE IF NOT EXISTS $tableName ( | |
ip VARCHAR(45) PRIMARY KEY, | |
visits INT NOT NULL DEFAULT 1, | |
hits INT NOT NULL DEFAULT 1 | |
);" | |
); | |
$updateVisits = ''; | |
if (!isset($_SESSION['isLogged'])) { | |
$_SESSION['isLogged'] = true; | |
$updateVisits = 'visits = visits + 1,'; | |
} | |
$ip = $_SERVER['REMOTE_ADDR']; | |
$dbh->exec( | |
"INSERT INTO $tableName (ip) VALUES ('$ip') | |
ON DUPLICATE KEY UPDATE | |
$updateVisits | |
hits = hits + 1;" | |
); | |
$sth = $dbh->query( | |
"SELECT SUM(hits) AS hits, | |
SUM(visits) AS visits, | |
COUNT(*) AS users | |
FROM $tableName" | |
); | |
$sth->setFetchMode(PDO::FETCH_ASSOC); | |
$result = $sth->fetch(); | |
$dbh = null; | |
} catch (PDOException $e) { | |
echo $e->getMessage(); | |
} | |
foreach ($result as $key => $value) { | |
echo $key . ': ' . $value . '<br>'; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* # Матрицы | |
* | |
* Сгенерировать матрицу размером 3x3, заполненную случайными числами от 0 до | |
* 10, вывести на экран в виде таблицы. | |
* | |
* Преобразовать матрицу в одномерный массив, результат вывести на экран. | |
* | |
* Найти уникальные элементы в матрице, результат вывести на экран. | |
* | |
* Найти суммы элементов матрицы построчно, результат вывести на экран. | |
* | |
* Умножить матрицу на 2, результат вывести на экран в виде таблицы. | |
* | |
* Найти максимальные значения среди элементов матрицы построчно, результат | |
* вывести на экран. | |
* | |
* Транспонировать матрицу, результат вывести на экран в виде таблицы. | |
*/ | |
// The matrix | |
for ($i = 0; $i < 3; $i += 1) { | |
for ($j = 0; $j < 3; $j += 1) { | |
$matrix[$i][] = mt_rand(0, 10); | |
} | |
} | |
// Flattened matrix | |
$flattenedMatrix = call_user_func_array('array_merge', $matrix); | |
// Unique elements of the flattened matrix | |
$uniqueElements = array_unique($flattenedMatrix); | |
// Sums | |
$sums = array_map('array_sum', $matrix); | |
// Multiply by 2 | |
$doubledMatrix = array_map(function ($row) { | |
return array_map(function ($value) { | |
return $value * 2; | |
}, $row); | |
}, $matrix); | |
// Max in each row | |
$maxes = array_map('max', $matrix); | |
// Transpose | |
$transposedMatrix = array_reduce($matrix, function ($carry, $row) { | |
foreach ($row as $columnIndex => $value) { | |
$carry[$columnIndex][] = $value; | |
} | |
return $carry; | |
}, []); | |
/*----------------------------------------------------------------------------*/ | |
function drawTable($title, $matrix) { | |
echo $title; | |
echo '<table border="1">'; | |
foreach ($matrix as $row) { | |
echo '<tr>'; | |
foreach ($row as $value) { | |
echo '<td>' . $value; | |
} | |
} | |
echo '</table><hr>'; | |
} | |
function printArray($title, $array) { | |
echo $title; | |
echo '<pre>'; | |
print_r($array); | |
echo '</pre><hr>'; | |
} | |
/*----------------------------------------------------------------------------*/ | |
drawTable('Original', $matrix); | |
printArray('Flattened matrix', $flattenedMatrix); | |
printArray('Unique elements', $uniqueElements); | |
printArray('Sums', $sums); | |
drawTable('Doubled values', $doubledMatrix); | |
printArray('Max in each row', $maxes); | |
drawTable('Transposed matrix', $transposedMatrix); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* # ООП | |
* | |
* Написать класс Init, от которого нельзя сделать наследника, состоящий из | |
* трёх методов: | |
* * create() — доступен только для методов класса, создает таблицу test, | |
* содержащую 5 полей: | |
* * id — целое, автоинкрементарное | |
* * script_name — строковое, длиной 25 символов | |
* * start_time — целое | |
* * end_time — целое | |
* * result — один вариант из 'normal', 'illegal', 'failed', 'success' | |
* * fill() — доступен только для методов класса, заполняет таблицу случайными | |
* данными | |
* * get() — доступен извне класса, выбирает данные из таблицы test по критерию: | |
* result среди значений 'normal' и 'success' | |
* | |
* В конструкторе выполняются методы create() и fill(). | |
*/ | |
final class Init | |
{ | |
private $dbh; | |
private $tableName = 'test'; | |
private function create() | |
{ | |
try { | |
$this->dbh->exec( | |
"CREATE TABLE IF NOT EXISTS $this->tableName ( | |
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, | |
script_name VARCHAR(25) NOT NULL, | |
start_time INT UNSIGNED NOT NULL, | |
end_time INT UNSIGNED NOT NULL, | |
result ENUM( | |
'normal', 'illegal', 'failed', 'success' | |
) NOT NULL | |
);" | |
); | |
} catch (PDOException $e) { | |
echo $e->getMessage(); | |
} | |
} | |
private function fill() | |
{ | |
$scriptName = substr( | |
str_shuffle( | |
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' | |
), | |
0, | |
25 | |
); | |
$startTime = mt_rand(); | |
$endTime = mt_rand(); | |
$result = mt_rand(1, 4); | |
try { | |
$this->dbh->exec( | |
"INSERT INTO $this->tableName ( | |
script_name, | |
start_time, | |
end_time, | |
result | |
) VALUES ( | |
'$scriptName', | |
$startTime, | |
$endTime, | |
$result | |
);" | |
); | |
} catch (PDOException $e) { | |
echo $e->getMessage(); | |
} | |
} | |
public function __construct() | |
{ | |
$host = 'localhost'; | |
$dbName = 'tasks'; | |
$user = 'root'; | |
$pass = 'root'; | |
try { | |
$this->dbh = new PDO("mysql:host=$host", $user, $pass); | |
$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); | |
$this->dbh->exec( | |
"CREATE DATABASE IF NOT EXISTS $dbName | |
DEFAULT CHARACTER SET utf8 | |
DEFAULT COLLATE utf8_general_ci;" | |
); | |
$this->dbh->exec("use $dbName;"); | |
} catch (PDOException $e) { | |
echo $e->getMessage(); | |
} | |
$this->create(); | |
$this->fill(); | |
} | |
public function get() | |
{ | |
try { | |
$sth = $this->dbh->query( | |
"SELECT * FROM $this->tableName | |
WHERE result in (1, 4);" | |
); | |
$sth->setFetchMode(PDO::FETCH_ASSOC); | |
$result = $sth->fetchAll(); | |
} catch (PDOException $e) { | |
echo $e->getMessage(); | |
} | |
return $result; | |
} | |
public function __destruct() | |
{ | |
$this->dbh = null; | |
} | |
} | |
$init = new Init(); | |
echo '<pre>'; | |
print_r($init->get()); | |
echo '</pre>'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* # Виды отношений в реляционной модели | |
* | |
* Разработать структуру таблиц для базы данных библиотеки. | |
* В базе необходимо хранить названия книг и имена авторов. | |
* Написать запрос для вывода названий книг и количества авторов для всех книг, | |
* написанных в соавторстве. | |
* | |
* Пример данных для наполнения базы: | |
* * "JavaScript: The Good Parts" by Douglas Crockford | |
* * "Design Patterns: Elements of Reusable Object-Oriented Software" | |
* by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides | |
* * "The Pragmatic Programmer: From Journeyman to Master" | |
* by Andrew Hunt and David Thomas | |
* * "Pragmatic Thinking and Learning: Refactor Your Wetware" | |
* by Andrew Hunt | |
*/ | |
$host = 'localhost'; | |
$dbName = 'tasks'; | |
$user = 'root'; | |
$pass = 'root'; | |
try { | |
$dbh = new PDO("mysql:host=$host", $user, $pass); | |
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); | |
$dbh->exec( | |
"CREATE DATABASE IF NOT EXISTS $dbName | |
DEFAULT CHARACTER SET utf8 | |
DEFAULT COLLATE utf8_general_ci;" | |
); | |
$dbh->exec("use $dbName;"); | |
$dbh->exec( | |
'CREATE TABLE IF NOT EXISTS books ( | |
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, | |
book VARCHAR(255) NOT NULL | |
);' | |
); | |
$dbh->exec( | |
'CREATE TABLE IF NOT EXISTS authors ( | |
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, | |
author VARCHAR(255) NOT NULL | |
);' | |
); | |
$dbh->exec( | |
'CREATE TABLE IF NOT EXISTS books_authors ( | |
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, | |
book_id VARCHAR(255) NOT NULL, | |
author_id VARCHAR(255) NOT NULL | |
);' | |
); | |
/* | |
$dbh->exec( | |
'INSERT INTO books (book) VALUES | |
("JavaScript: The Good Parts"), | |
("Design Patterns: Elements of Reusable Object-Oriented Software"), | |
("The Pragmatic Programmer: From Journeyman to Master"), | |
("Pragmatic Thinking and Learning: Refactor Your Wetware");' | |
); | |
$dbh->exec( | |
'INSERT INTO authors (author) VALUES | |
("Douglas Crockford"), | |
("Erich Gamma"), | |
("Richard Helm"), | |
("Ralph Johnson"), | |
("John Vlissides"), | |
("Andrew Hunt"), | |
("David Thomas");' | |
); | |
$dbh->exec( | |
'INSERT INTO books_authors (book_id, author_id) VALUES | |
(1, 1), | |
(2, 2), | |
(2, 3), | |
(2, 4), | |
(2, 5), | |
(3, 6), | |
(3, 7), | |
(4, 6);' | |
); | |
*/ | |
// get book name and authors number for books with coauthors | |
$sth = $dbh->query( | |
'SELECT books.book, ( | |
SELECT COUNT(*) | |
FROM books_authors | |
WHERE book_id = books_authors_count.book_id | |
) AS authors_number | |
FROM books_authors AS books_authors_count | |
JOIN books | |
ON books_authors_count.book_id = books.id | |
GROUP BY book, authors_number | |
HAVING authors_number > 1;' | |
); | |
$sth->setFetchMode(PDO::FETCH_ASSOC); | |
$result = $sth->fetchAll(); | |
$dbh = null; | |
} catch (PDOException $e) { | |
echo $e->getMessage(); | |
} | |
echo '<ul>'; | |
foreach ($result as $record) { | |
echo '<li>' . | |
$record['book'] . ' (' . $record['authors_number'] . ' authors)</li>'; | |
} | |
echo '</ul>'; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment