Skip to content
Snippets Groups Projects

Ptps function 6

Merged Адлан Шамавов requested to merge PTPS_Function_6 into main
3 files
+ 151
117
Compare changes
  • Side-by-side
  • Inline
Files
3
+ 116
90
<?php
declare(strict_types=1);
namespace Hp\Test;
use DateTimeImmutable;
use DateTime;
use DateInterval;
use DatePeriod;
use Exception;
class Functions {
class Functions
{
/**
* Выполняет сортировку массива по убыванию цены *
* @param array $array *
* @return array
*/
function sortPrice(array $array): array {
array_multisort(array_column($array, 'price'), SORT_DESC, array_column($array, 'count'), SORT_ASC, $array);
* Выполняет сортировку массива по убыванию цены
* @param array $array
* @return array
*/
public function sortPrice(array $array): array
{
$prices = array_column($array, 'price');
$counts = array_column($array, 'count');
array_multisort(
$prices,
SORT_DESC,
$counts,
SORT_ASC, $array
);
return $array;
}
//На выход должна вернуть отсортированный массив по ключу *price* DESC и во вторую очередь по *count* ASC:
//[ ['price'=>12, 'count'=>4], ['price'=>10, 'count'=>2], ['price'=>8, 'count'=>4], ['price'=>8, 'count'=>5], ['price'=>5, 'count'=>5], ]
/**
* На выход должна вернуть отсортированный массив по ключу *price* DESC
* и во вторую очередь по *count* ASC:
* [['price'=>12, 'count'=>4], ['price'=>10, 'count'=>2], ['price'=>8, 'count'=>4],
* ['price'=>8, 'count'=>5], ['price'=>5, 'count'=>5],]
*/
/* Найдет элемент с указаным id *
* @param array $array - массив, содержащий элементы со структурой *
[
* 'id' => 30, *
'name' => 'Jhon', *
'age' => 23, *
]
* @param $id - ид искомого элемента *
* @return array - найденный элемент
*/
function search($array, $id): ?array {
$rowId = array_search($id, array_column($array, 'id'));
return $array[$rowId];
/**
* Найдет элемент с указаным id
* @param array $array - массив, содержащий элементы со структурой
* [
* 'id' => 30,
* 'name' => 'Jhon',
* 'age' => 23,
* ]
* @param $id - ид искомого элемента
* @return ?array - найденный элемент
*/
public function search(array $array, int $id): ?array
{
$rowId = array_search($id, array_column($array, 'id'), true);
if ($rowId) {
return $array[$rowId];
}
return null;
}
/**
* Удалить дубликаты, оставив только уникальные значения
* @param array $array
* @return array
*/
/**
* Удалить дубликаты, оставив только уникальные значения
* @param array $array
* @return array
*/
function uniqElements(array $array): array {
public function uniqElements(array $array): array
{
return array_unique($array, SORT_REGULAR);
}
}
//Выходной массив:
/** Array (
/**
* Выходной массив:
* Array (
* [0] => Array([0] => laravel, [1] => php)
* [1] => Array([0] => codeigniter, [1] => php)
* [3] => Array([0] => c++, [1] => java))
* [3] => Array([0] => c++, [1] => java))
* )
*/
/**
* Сгруппировать подразедлы в верхние разделы меню
* Дочерние элементы поместить в массив родителя с ключом submenu *
* Значение под ключом depth определяет уровень раздела *
* Массив $aMenu всегда начинается с элемента depth = 0,
* все последующие элементы с depth = 1 являются его дочерними *
* элементами * *
* @param array $aMenu * *
* @return array
*/
function prepareMenu(array $aMenu): array {
*/
/**
* Сгруппировать подразедлы в верхние разделы меню
* Дочерние элементы поместить в массив родителя с ключом 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) {
@@ -85,48 +105,54 @@ class Functions {
);
}
return $result;
}
}
/** Выходные данные:
/**
* Выходные данные:
* $aMenu = [
* [
* 'name' => 'Смартфоны и гаджеты',
* 'depth' => 0,
* 'submenu' => [
* ['name' => 'Смартфоны, мобильные телефоны','depth' => 1,],
* ['name' => 'Планшеты','depth' => 1,],
* ['name' => 'Наушники и гарнитуры','depth' => 1,]
* ,]
* ,],
* [
* 'name' => 'Компьютеры и ноутбуки',
* 'depth' => 0,
* 'submenu' => [
* ['name' => 'Ноутбуки и аксессуары','depth' => 1,],
* ['name' => 'Компьютеры и мониторы','depth' => 1,],
* ['name' => 'Компьютерные комплектующие','depth' => 1,],]],
* [
* 'name' => 'Техника для дома',
* 'depth' => 0,
* 'submenu' => [
* ['name' => 'Техника для уборки','depth' => 1,],
* ['name' => 'Товары для ухода за одеждой','depth' => 1,],
* ['name' => 'Аксессуары для техники','depth' => 1,],]],
* [
* 'name' => 'Товары для дома и кухни','depth' => 0,
* 'submenu' => [
* ['name' => 'Посуда','depth' => 1,],]], ];
*/
/**
* Функция рассчитывает кол-во дней до нового года
* @param DateTime $date дата от которой, необходимо рассчитать кол-во дней
* @return int
*/
function howDaysToNy(DateTimeImmutable $date): int {
$endYear = date("Y-12-31", date_timestamp_get($date));
* 'name' => 'Смартфоны и гаджеты',
* 'depth' => 0,
* 'submenu' => [
* ['name' => 'Смартфоны, мобильные телефоны','depth' => 1,],
* ['name' => 'Планшеты','depth' => 1,],
* ['name' => 'Наушники и гарнитуры','depth' => 1,],],
* ],
* [
* 'name' => 'Компьютеры и ноутбуки',
* 'depth' => 0,
* 'submenu' => [
* ['name' => 'Ноутбуки и аксессуары','depth' => 1,],
* ['name' => 'Компьютеры и мониторы','depth' => 1,],
* ['name' => 'Компьютерные комплектующие','depth' => 1,],]],
* [
* 'name' => 'Техника для дома',
* 'depth' => 0,
* 'submenu' => [
* ['name' => 'Техника для уборки','depth' => 1,],
* ['name' => 'Товары для ухода за одеждой','depth' => 1,],
* ['name' => 'Аксессуары для техники','depth' => 1,],]
* ],
* [
* 'name' => 'Товары для дома и кухни',
* 'depth' => 0,
* 'submenu' => [
* ['name' => 'Посуда','depth' => 1,],]],
* ];
*/
/**
* Функция рассчитывает кол-во дней до нового года
* @param DateTimeImmutable $date дата от которой, необходимо рассчитать кол-во дней
* @return int
* @throws Exception
*/
public function howDaysToNy(DateTimeImmutable $date): int
{
$endYear = date("Y-12-31", date_timestamp_get($date));
$dateInterval = date_diff(new DateTimeImmutable($endYear), $date);
return $dateInterval->format("%a") + 1;
return (int)$dateInterval->format("%a") + 1;
}
}
Loading