Тестовое задание на вакансию PHP-Программист в компанию Astrio
№ | Решение |
---|---|
1 | Решение |
2 | Решение |
3 | Решение |
4 | Решение |
Дан массив "категории". Каждая категория имеет следующие параметры:
"id" — уникальный числовой идентификатор категорий
"title" — название категории
"children" - дочерние категории (массив из категорий)
Вложенность категории неограниченна (дочерние категории могу иметь свои вложенные категории и т.д.)
Пример массива:
$categories = array(
array(
"id" => 1,
"title" => "Обувь",
'children' => array(
array(
'id' => 2,
'title' => 'Ботинки',
'children' => array(
array('id' => 3, 'title' => 'Кожа'),
array('id' => 4, 'title' => 'Текстиль'),
),
),
array('id' => 5, 'title' => 'Кроссовки',),
)
),
array(
"id" => 6,
"title" => "Спорт",
'children' => array(
array(
'id' => 7,
'title' => 'Мячи'
)
)
),
);
Необходимо написать функцию searchCategory($categories, $id), которая по идентификатору категории возвращает название категории.
Даны три таблицы:
таблица `worker` (работник) с данными — id (id работника), first_name (имя), last_name (фамилия)
таблица `child` (ребенок) с данными — worker_id (id работника), name (имя ребенка)
таблица `car` (машина) с данными — worker_id (id работника), model (модель машины)
Структура таблиц:
CREATE TABLE `worker` (
`id` int(11) NOT NULL,
`first_name` varchar(100) NOT NULL,
`last_name` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
CREATE TABLE `car` (
`user_id` int(11) NOT NULL,
`model` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `child` (
`user_id` int(11) NOT NULL,
`name` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Необходимо написать один SQL запрос который возвращает: имена и фамилии всех работников, список их детей через запятую и марку машины. Выбрать нужно только тех работников, у которых есть или была машина (если машина была и потом её не стало, то поле model становится null).
Написать функцию, которая на входе принимает массив из открывающихся или закрывающихся тегов (например text “<a>”, “</td>”
), а возвращает результат проверки корректности: т.е. является ли принятая функцией последовательность тегов структурой корректного HTML документа. Например, последовательность text “<a>”, “<div>”, “</div>”, “</a>”, “<span>”, “</span>”
- корректная структура, а последовательность text “<a>”, “<div>”, ”</a>”
- некорректная структура.
Необходимо использовать нативный php без использования библиотек DOMDocument, Simplexml и тд.
Написать класс-оболочку хранилища «Box».
В хранилище можно установить данные php (setData($key, $value))
, получить данные php (getData($key))
, сохранить данные php (save())
и загрузить данные php (load())
$key — произвольный идентификатор данных
$value — скалярные данные или массив
Хранилище состоит из:
- Интерфейс описывающий методы установки данных, получения данных, сохранения и загрузки
- Абстрактный класс AbstractBox содержащий реализацию необходимых общих методов
- Класс FileBox расширяющий абстрактный класс AbstractBox. При вызове save() сохраняет заданные в класс данные в файл. При вызове load() достает данные из файла.
- Класс DbBox расширяющий абстрактный класс AbstractBox. При вызове save() сохраняет заданные в класс данные в базу. При вызове load() достает данные из базы.
Функция load не должна ничего возвращать, должна лишь сохранять полученные данные внутри объекта. Для получения данных служит функция getData($key).
При сохранении данных необходимо учитывать ключи новых данных и тех данных что хранятся в базе(файле), если значение с ключом в базе(файле) уже существует, то нужно его значение заменить на новое.
Классы FileBox и DbBox должен быть реализованы таким образом, чтобы нельзя было создать более одного экземпляра каждого из классов.
Общие пожелание по выполнению всех заданий: по 1 и 3 заданию необходимо в отдельном файле создать одну функцию с необходимой логикой, если необходимо какую-либо из функций разбить не несколько, делать все в этом же файле, по 2 заданию, необходимо в отдельном файле написать один sql запрос и больше ничего, по 4 заданию в отдельной папке создать необходимые классы. Никаких index.php, html разметки и тем более стилей добавлять не надо.