Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • a.shamavov/iqdevtranningprogram
1 result
Show changes
Commits on Source (6)
...@@ -44,4 +44,44 @@ class Functions ...@@ -44,4 +44,44 @@ class Functions
} }
return null; return null;
} }
/**
* Удалить дубликаты, оставив только уникальные значения
* @param array $array
* @return array
*/
public function uniqElements(array $array): array
{
return array_unique($array, SORT_REGULAR);
}
/**
* Сгруппировать подразедлы в верхние разделы меню
* Дочерние элементы поместить в массив родителя с ключом submenu
* Значение под ключом depth определяет уровень раздела
* Массив $aMenu всегда начинается с элемента depth = 0,
* все последующие элементы с depth = 1 являются его дочерними
* элементами
* @param array $aMenu
* @return array
*/
public function prepareMenu(array $aMenu): array
{
$result = [];
foreach ($aMenu as $arr) {
if ($arr['depth'] == 0) {
$result[] = array(
'name' => $arr['name'],
'depth' => $arr['depth'],
'submenu' => []
);
continue;
}
$result[array_key_last($result)]['submenu'][] = array(
'name' => $arr['name'],
'depth' => $arr['depth'],
);
}
return $result;
}
} }
\ No newline at end of file
...@@ -5,7 +5,9 @@ namespace App\Controller; ...@@ -5,7 +5,9 @@ namespace App\Controller;
use App\Action\Functions; use App\Action\Functions;
use App\Requests\{ use App\Requests\{
SortPriceRequest, SortPriceRequest,
SearchRequest SearchRequest,
UniqElementsRequest,
MenuRequest
}; };
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
...@@ -37,4 +39,11 @@ class HomeController extends AbstractController ...@@ -37,4 +39,11 @@ class HomeController extends AbstractController
$result = $this->functions->uniqElements($request->getRequest()->toArray()['items']); $result = $this->functions->uniqElements($request->getRequest()->toArray()['items']);
return $this->json($result); return $this->json($result);
} }
#[Route('/prepareMenu', name: 'prepareMenu', methods: ['POST'])]
public function prepareMenu(MenuRequest $request): Response
{
$result = $this->functions->prepareMenu($request->getRequest()->toArray()['items']);
return $this->json($result);
}
} }
<?php
namespace App\Requests;
use Symfony\Component\Validator\Constraints as Assert;
class MenuRequest extends BaseRequest
{
#[Assert\All([
new Assert\Collection([
'name' => new Assert\Type('string'),
'depth' => new Assert\Type('int'),
])
])]
public array $items;
}
\ No newline at end of file
{% block body %} {% block body %}
<h1>Сортировка массива:</h1> <ul>
<form method="POST"> {% for value in menu %}
{{ dump(array) }} {% if value.depth == 0 %}
{% for key1, value1 in array %} <h2>{{ value.name }}</h2>
{% for key2, value2 in value1 %} {% for val in value.submenu %}
<input type="hidden" name="array[][]" value="{{ value2 }}"> <li>{{ val.name }}</li>
{% endfor %} {% endfor %}
{% endfor %} {% endif %}
<button type="submit">Отправить массив</button> {% endfor %}
</form> </ul>
{% endblock %} {% endblock %}
\ No newline at end of file