Пример выполнения тестового задания на должность разработчик PHP (Работа с массивами)

Задание:

/** * @charset UTF-8 * * Задание 1. Работа с массивами. * * Есть 2 списка: общий список районов и список районов, которые связаны между собой по географии (соседние районы). * Есть список сотрудников, которые работают в определённых районах. * * Необходимо написать функцию для поиска сотрудника, у которого есть полное совпадение по району, * если таких сотрудников нет — тогда искать по соседним районам. * * Функция должна принимать 1 аргумент: название района (строка). * Возвращать: логин сотрудника или null. * */


# Использовать данные:

// Список районов
$areas = array (
	1 => '5-й поселок',
	2 => 'Голиковка',
	3 => 'Древлянка',
	4 => 'Заводская',
	5 => 'Зарека',
	6 => 'Ключевая',
	7 => 'Кукковка',
	8 => 'Новый сайнаволок',
	9 => 'Октябрьский',
	10 => 'Первомайский',
	11 => 'Перевалка',
	12 => 'Сулажгора',
	13 => 'Университетский городок',
	14 => 'Центр',
);

// Близкие районы, связь осуществляется по индентификатору района из массива $areas
$nearby = array (
	1 => array(12,11),
	2 => array(5,7,6,8),
	3 => array(11,13),
	4 => array(10,9,12),
	5 => array(2,6,7,8),
	6 => array(5,2,7,8),
	7 => array(2,5,6,8),
	8 => array(6,2,7,5),
	9 => array(10,14),
	10 => array(9,14,12),
	11 => array(13,3,1,12),
	12 => array(1,10),
	13 => array(11,1,12),
	14 => array(9,10),
);

// список сотрудников
$workers = array (
	0 => array (
			'login' => 'login1',
			'area_name' => 'Октябрьский',
	),
	1 => array (
			'login' => 'login2',
			'area_name' => 'Зарека',
	),
	2 => array (
			'login' => 'login3',
			'area_name' => 'Сулажгора',
	),
	3 => array (
			'login' => 'login4',
			'area_name' => 'Древлянка',
	),
	4 => array (
			'login' => 'login5',
			'area_name' => 'Центр',
	),
);

Выполнение задания:

function check_worker($area)
{
	global $workers;

	$key = array_search( $area, array_column( $workers, 'area_name' ));

	if ($key === false){
		return false;
	}
	
	return $workers[$key]['login'];
}

function check_neighbors_area($area)
{
	global $areas, $nearby;

	$neighbors_arr = array();

	$area_num = array_search($area, $areas);

	$neighbors_arr = array_map(function($n) use ($area_num){
		if (!in_array($area_num, $n)) {
			return null;
		}
		return $n;
	}, $nearby);

	$neighbors_arr = array_values(array_diff($neighbors_arr, array('')));//!!!
	if(!$neighbors_arr)
		return [];
	$neighbors_arr = call_user_func_array('array_merge', $neighbors_arr);
	$neighbors_arr = array_unique(array_values(array_diff($neighbors_arr, array($area_num))));

	return $neighbors_arr;
}

function find_worker($area)
{
	global $areas;

	$result = check_worker($area);

	if($result === false){
		$neighbors_arr = check_neighbors_area($area);

		$tmp = '';
		foreach ($neighbors_arr as $value) {
			$result = check_worker($areas[$value]).' '.$tmp;
			$tmp = $result;
		}
		if(trim($result)){
			return $result;
		}else{
			return null;
		}
	}
	return $result;
}

echo(find_worker('Новый сайнаволок'));

Вот такой пример интересного задания, данное решение не идеально и далеко от продакшн. Если задание понравилось, предлагайте свои решения.

Добавить комментарий