Loading public/public/Actions/IdSearchAction.php 0 → 100644 +28 −0 Original line number Diff line number Diff line <?php namespace App\Actions; class IdSearchAction { /** * Найдет элемент с указаным id * @param array $array - массив, содержащий элементы со структурой * [ * 'id' => 30, * 'name' => 'Jhon', * 'age' => 23, * ] * @param $id - ид искомого элемента * @return array|null - найденный элемент/ вернет null при его отсутствии */ public static function search(array $array, $id): ?array { foreach ($array as $item){ if ($item['id'] === $id){ return $item; } } return null; } } public/public/Actions/PrepareMenuAction.php 0 → 100644 +35 −0 Original line number Diff line number Diff line <?php namespace App\Actions; class PrepareMenuAction { /** * Группирует подразедлы в верхние разделы меню * Дочерние элементы помещает в массив родителя с ключом submenu * Значение под ключом depth определяет уровень раздела * Массив $aMenu всегда должен начинается с элемента depth = 0, * все последующие элементы с depth = 1 являются его дочерними элементами * * @param array $aMenu * @return array */ public static function prepare(array $aMenu): array { $returnableAMenu = []; foreach ($aMenu as $menuPoint) { $depth = $menuPoint["depth"]; if ($depth === 1) { $tempArray = array_pop($returnableAMenu); $tempArray['submenu'][] = $menuPoint; $returnableAMenu[] = $tempArray; } else { $returnableAMenu[] = $menuPoint; } } return $returnableAMenu; } } public/public/TestData/TestData.php +74 −0 Original line number Diff line number Diff line Loading @@ -10,4 +10,78 @@ class TestData { public const START_DATE = "13.04.2024"; public const END_DATE = "13.04.2025"; public const RAW_MENU = [ [ 'name' => 'Смартфоны и гаджеты', 'depth' => 0, ], [ 'name' => 'Смартфоны, мобильные телефоны', 'depth' => 1, ], [ 'name' => 'Планшеты', 'depth' => 1, ], [ 'name' => 'Наушники и гарнитуры', 'depth' => 1, ], [ 'name' => 'Компьютеры и ноутбуки', 'depth' => 0, ], [ 'name' => 'Ноутбуки и аксессуары', 'depth' => 1, ], [ 'name' => 'Компьютеры и мониторы', 'depth' => 1, ], [ 'name' => 'Компьютерные комплектующие', 'depth' => 1, ], [ 'name' => 'Техника для дома', 'depth' => 0, ], [ 'name' => 'Техника для уборки', 'depth' => 1, ], [ 'name' => 'Товары для ухода за одеждой', 'depth' => 1, ], [ 'name' => 'Аксессуары для техники', 'depth' => 1, ], [ 'name' => 'Товары для дома и кухни', 'depth' => 0, ], [ 'name' => 'Посуда', 'depth' => 1, ], ]; public const ARRAY_FOR_SEARCHING = [ [ 'id' => 30, 'name' => 'Sasha', ], [ 'id' => 542, 'name' => 'Adlan', ], [ 'id' => 3234, 'name' => 'Pavel', ], ]; } public/public/index.php +12 −0 Original line number Diff line number Diff line Loading @@ -3,9 +3,21 @@ require_once __DIR__ . '/../vendor/autoload.php'; use App\Actions\DiffDaysAction; use App\Actions\IdSearchAction; use App\Actions\PrepareMenuAction; use App\TestData\TestData; echo 'DiffDaysAction <br>' var_dump(DiffDaysAction::count( new DateTimeImmutable(TestData::START_DATE), new DateTimeImmutable(TestData::END_DATE) )); echo '<hr>' echo 'PrepareMenuAction: <br>'; var_dump(PrepareMenuAction::prepare(TestData::RAW_MENU)); echo '<hr>' echo 'IdSearchAction: <br>' var_dump(IdSearchAction::search(TestData::ARRAY_FOR_SEARCHING)); echo '<hr>' Loading
public/public/Actions/IdSearchAction.php 0 → 100644 +28 −0 Original line number Diff line number Diff line <?php namespace App\Actions; class IdSearchAction { /** * Найдет элемент с указаным id * @param array $array - массив, содержащий элементы со структурой * [ * 'id' => 30, * 'name' => 'Jhon', * 'age' => 23, * ] * @param $id - ид искомого элемента * @return array|null - найденный элемент/ вернет null при его отсутствии */ public static function search(array $array, $id): ?array { foreach ($array as $item){ if ($item['id'] === $id){ return $item; } } return null; } }
public/public/Actions/PrepareMenuAction.php 0 → 100644 +35 −0 Original line number Diff line number Diff line <?php namespace App\Actions; class PrepareMenuAction { /** * Группирует подразедлы в верхние разделы меню * Дочерние элементы помещает в массив родителя с ключом submenu * Значение под ключом depth определяет уровень раздела * Массив $aMenu всегда должен начинается с элемента depth = 0, * все последующие элементы с depth = 1 являются его дочерними элементами * * @param array $aMenu * @return array */ public static function prepare(array $aMenu): array { $returnableAMenu = []; foreach ($aMenu as $menuPoint) { $depth = $menuPoint["depth"]; if ($depth === 1) { $tempArray = array_pop($returnableAMenu); $tempArray['submenu'][] = $menuPoint; $returnableAMenu[] = $tempArray; } else { $returnableAMenu[] = $menuPoint; } } return $returnableAMenu; } }
public/public/TestData/TestData.php +74 −0 Original line number Diff line number Diff line Loading @@ -10,4 +10,78 @@ class TestData { public const START_DATE = "13.04.2024"; public const END_DATE = "13.04.2025"; public const RAW_MENU = [ [ 'name' => 'Смартфоны и гаджеты', 'depth' => 0, ], [ 'name' => 'Смартфоны, мобильные телефоны', 'depth' => 1, ], [ 'name' => 'Планшеты', 'depth' => 1, ], [ 'name' => 'Наушники и гарнитуры', 'depth' => 1, ], [ 'name' => 'Компьютеры и ноутбуки', 'depth' => 0, ], [ 'name' => 'Ноутбуки и аксессуары', 'depth' => 1, ], [ 'name' => 'Компьютеры и мониторы', 'depth' => 1, ], [ 'name' => 'Компьютерные комплектующие', 'depth' => 1, ], [ 'name' => 'Техника для дома', 'depth' => 0, ], [ 'name' => 'Техника для уборки', 'depth' => 1, ], [ 'name' => 'Товары для ухода за одеждой', 'depth' => 1, ], [ 'name' => 'Аксессуары для техники', 'depth' => 1, ], [ 'name' => 'Товары для дома и кухни', 'depth' => 0, ], [ 'name' => 'Посуда', 'depth' => 1, ], ]; public const ARRAY_FOR_SEARCHING = [ [ 'id' => 30, 'name' => 'Sasha', ], [ 'id' => 542, 'name' => 'Adlan', ], [ 'id' => 3234, 'name' => 'Pavel', ], ]; }
public/public/index.php +12 −0 Original line number Diff line number Diff line Loading @@ -3,9 +3,21 @@ require_once __DIR__ . '/../vendor/autoload.php'; use App\Actions\DiffDaysAction; use App\Actions\IdSearchAction; use App\Actions\PrepareMenuAction; use App\TestData\TestData; echo 'DiffDaysAction <br>' var_dump(DiffDaysAction::count( new DateTimeImmutable(TestData::START_DATE), new DateTimeImmutable(TestData::END_DATE) )); echo '<hr>' echo 'PrepareMenuAction: <br>'; var_dump(PrepareMenuAction::prepare(TestData::RAW_MENU)); echo '<hr>' echo 'IdSearchAction: <br>' var_dump(IdSearchAction::search(TestData::ARRAY_FOR_SEARCHING)); echo '<hr>'