Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
T
tasks-php
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Адлан Шамавов
tasks-php
Merge requests
!6
Ptps function 6
Code
Review changes
Check out branch
Download
Patches
Plain diff
Merged
Ptps function 6
PTPS_Function_6
into
main
Overview
0
Commits
9
Pipelines
0
Changes
3
Merged
Адлан Шамавов
requested to merge
PTPS_Function_6
into
main
11 months ago
Overview
0
Commits
9
Pipelines
0
Changes
3
Expand
0
0
Merge request reports
Viewing commit
ff02c3e0
Show latest version
3 files
+
151
−
117
Inline
Compare changes
Side-by-side
Inline
Show whitespace changes
Show one file at a time
Files
3
Search (e.g. *.vue) (Ctrl+P)
ff02c3e0
refactorting
· ff02c3e0
Адлан Шамавов
authored
11 months ago
src/Functions.php
+
116
−
90
Options
<?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