From 2bbcd697c2adb6c6371170838e46186399380b2c Mon Sep 17 00:00:00 2001 From: "a.shamavov" Date: Wed, 3 Apr 2024 16:22:51 +0500 Subject: [PATCH 1/5] add countFriday13 --- index.php | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/index.php b/index.php index a0fee8a..383ed14 100644 --- a/index.php +++ b/index.php @@ -1,13 +1,17 @@ format("%a") + 1; +function countFriday13(int $year): iterable { + $stardDate = new DateTime("{$year}-01-01 Friday"); + $year += 1; + $endDate = new DateTime("{$year}-01-01"); + $interval = new DateInterval('P7D'); + foreach(new DatePeriod($stardDate, $interval, $endDate) as $day) { + yield new DateTimeImmutable($day->format("Y-m-d")); + } } ?> @@ -21,7 +25,9 @@ function howDaysToNy(DateTimeImmutable $date): int { format("Y-m-d l") . "\n"); + } ?> \ No newline at end of file -- GitLab From bad9922730b43134123bcac342f51a21bd9236d0 Mon Sep 17 00:00:00 2001 From: "a.shamavov" Date: Wed, 10 Apr 2024 17:49:34 +0500 Subject: [PATCH 2/5] fix --- index.php | 18 ----------------- src/Functions.php | 51 ----------------------------------------------- 2 files changed, 69 deletions(-) diff --git a/index.php b/index.php index 5e1db12..b79a2f6 100644 --- a/index.php +++ b/index.php @@ -82,23 +82,5 @@ $func = new Hp\Test\Functions(); print($date->format("Y-m-d l") . "\n"); } ?> - -

Function 7

- Разница дней: "); - print($func->diffDays(new DateTimeImmutable(), new DateTimeImmutable("2025-01-01"))); - ?> - -

Function 8

- readLogFile(__DIR__ . "/public/text.txt"); - ?> - -

Function 9

- readFileLineByLine(__DIR__ . "/public/text.txt") as $line) { - print($line); - } - ?> \ No newline at end of file diff --git a/src/Functions.php b/src/Functions.php index 3523f74..40975a1 100644 --- a/src/Functions.php +++ b/src/Functions.php @@ -143,56 +143,5 @@ class Functions { yield new DateTimeImmutable($day->format("Y-m-d")); } } - - /** - * Вернет кол-во дней между датами - * @param DateTimeImmutable $dateStart дата начала - * @param DateTimeImmutable $dateEnd дата окончания - * @return int - */ - function diffDays(DateTimeImmutable $dateStart, DateTimeImmutable $dateEnd): int { - $dateInterval = date_diff($dateStart, $dateEnd); - return $dateInterval->format("%a") ; - } - - /** - * Переделай своё решение 8 задачи: - * замени вывод всего текста из файла разом на - * построчный вывод используя yield - * @param string $filePath путь до файла - * @return void - */ - function readLogFile(string $filePath): void { - if (file_exists($filePath)) { - $text = ""; - $file = fopen($filePath, "r"); - while(!feof($file)) { - $line = fgets($file); - $text .= $line; - } - fclose($file); - print($text); - } - else print("Такого файла не существует."); - } - - - /** - * Переделай своё решение 8 задачи: - * замени вывод всего текста из файла разом на - * построчный вывод используя yield - * @param string $filePath путь до файла - * @return void - */ - function readFileLineByLine(string $filePath): iterable { - if (file_exists($filePath)) { - $file = fopen($filePath, "r"); - while(!feof($file)) { - yield fgets($file); - } - fclose($file); - } - else yield "Такого файла не существует."; - } } -- GitLab From da5cd6e2edca39027cdb98de21abd35fe0203359 Mon Sep 17 00:00:00 2001 From: "a.shamavov" Date: Thu, 11 Apr 2024 12:03:27 +0500 Subject: [PATCH 3/5] refactoring --- vendor/autoload.php | 25 - vendor/composer/ClassLoader.php | 579 ------------------------ vendor/composer/LICENSE | 21 - vendor/composer/autoload_classmap.php | 10 - vendor/composer/autoload_namespaces.php | 9 - vendor/composer/autoload_psr4.php | 10 - vendor/composer/autoload_real.php | 36 -- vendor/composer/autoload_static.php | 36 -- 8 files changed, 726 deletions(-) delete mode 100644 vendor/autoload.php delete mode 100644 vendor/composer/ClassLoader.php delete mode 100644 vendor/composer/LICENSE delete mode 100644 vendor/composer/autoload_classmap.php delete mode 100644 vendor/composer/autoload_namespaces.php delete mode 100644 vendor/composer/autoload_psr4.php delete mode 100644 vendor/composer/autoload_real.php delete mode 100644 vendor/composer/autoload_static.php diff --git a/vendor/autoload.php b/vendor/autoload.php deleted file mode 100644 index a3d2b61..0000000 --- a/vendor/autoload.php +++ /dev/null @@ -1,25 +0,0 @@ - - * Jordi Boggiano - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Composer\Autoload; - -/** - * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. - * - * $loader = new \Composer\Autoload\ClassLoader(); - * - * // register classes with namespaces - * $loader->add('Symfony\Component', __DIR__.'/component'); - * $loader->add('Symfony', __DIR__.'/framework'); - * - * // activate the autoloader - * $loader->register(); - * - * // to enable searching the include path (eg. for PEAR packages) - * $loader->setUseIncludePath(true); - * - * In this example, if you try to use a class in the Symfony\Component - * namespace or one of its children (Symfony\Component\Console for instance), - * the autoloader will first look for the class under the component/ - * directory, and it will then fallback to the framework/ directory if not - * found before giving up. - * - * This class is loosely based on the Symfony UniversalClassLoader. - * - * @author Fabien Potencier - * @author Jordi Boggiano - * @see https://www.php-fig.org/psr/psr-0/ - * @see https://www.php-fig.org/psr/psr-4/ - */ -class ClassLoader -{ - /** @var \Closure(string):void */ - private static $includeFile; - - /** @var string|null */ - private $vendorDir; - - // PSR-4 - /** - * @var array> - */ - private $prefixLengthsPsr4 = array(); - /** - * @var array> - */ - private $prefixDirsPsr4 = array(); - /** - * @var list - */ - private $fallbackDirsPsr4 = array(); - - // PSR-0 - /** - * List of PSR-0 prefixes - * - * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2'))) - * - * @var array>> - */ - private $prefixesPsr0 = array(); - /** - * @var list - */ - private $fallbackDirsPsr0 = array(); - - /** @var bool */ - private $useIncludePath = false; - - /** - * @var array - */ - private $classMap = array(); - - /** @var bool */ - private $classMapAuthoritative = false; - - /** - * @var array - */ - private $missingClasses = array(); - - /** @var string|null */ - private $apcuPrefix; - - /** - * @var array - */ - private static $registeredLoaders = array(); - - /** - * @param string|null $vendorDir - */ - public function __construct($vendorDir = null) - { - $this->vendorDir = $vendorDir; - self::initializeIncludeClosure(); - } - - /** - * @return array> - */ - public function getPrefixes() - { - if (!empty($this->prefixesPsr0)) { - return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); - } - - return array(); - } - - /** - * @return array> - */ - public function getPrefixesPsr4() - { - return $this->prefixDirsPsr4; - } - - /** - * @return list - */ - public function getFallbackDirs() - { - return $this->fallbackDirsPsr0; - } - - /** - * @return list - */ - public function getFallbackDirsPsr4() - { - return $this->fallbackDirsPsr4; - } - - /** - * @return array Array of classname => path - */ - public function getClassMap() - { - return $this->classMap; - } - - /** - * @param array $classMap Class to filename map - * - * @return void - */ - public function addClassMap(array $classMap) - { - if ($this->classMap) { - $this->classMap = array_merge($this->classMap, $classMap); - } else { - $this->classMap = $classMap; - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, either - * appending or prepending to the ones previously set for this prefix. - * - * @param string $prefix The prefix - * @param list|string $paths The PSR-0 root directories - * @param bool $prepend Whether to prepend the directories - * - * @return void - */ - public function add($prefix, $paths, $prepend = false) - { - $paths = (array) $paths; - if (!$prefix) { - if ($prepend) { - $this->fallbackDirsPsr0 = array_merge( - $paths, - $this->fallbackDirsPsr0 - ); - } else { - $this->fallbackDirsPsr0 = array_merge( - $this->fallbackDirsPsr0, - $paths - ); - } - - return; - } - - $first = $prefix[0]; - if (!isset($this->prefixesPsr0[$first][$prefix])) { - $this->prefixesPsr0[$first][$prefix] = $paths; - - return; - } - if ($prepend) { - $this->prefixesPsr0[$first][$prefix] = array_merge( - $paths, - $this->prefixesPsr0[$first][$prefix] - ); - } else { - $this->prefixesPsr0[$first][$prefix] = array_merge( - $this->prefixesPsr0[$first][$prefix], - $paths - ); - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, either - * appending or prepending to the ones previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param list|string $paths The PSR-4 base directories - * @param bool $prepend Whether to prepend the directories - * - * @throws \InvalidArgumentException - * - * @return void - */ - public function addPsr4($prefix, $paths, $prepend = false) - { - $paths = (array) $paths; - if (!$prefix) { - // Register directories for the root namespace. - if ($prepend) { - $this->fallbackDirsPsr4 = array_merge( - $paths, - $this->fallbackDirsPsr4 - ); - } else { - $this->fallbackDirsPsr4 = array_merge( - $this->fallbackDirsPsr4, - $paths - ); - } - } elseif (!isset($this->prefixDirsPsr4[$prefix])) { - // Register directories for a new namespace. - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = $paths; - } elseif ($prepend) { - // Prepend directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - $paths, - $this->prefixDirsPsr4[$prefix] - ); - } else { - // Append directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - $this->prefixDirsPsr4[$prefix], - $paths - ); - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, - * replacing any others previously set for this prefix. - * - * @param string $prefix The prefix - * @param list|string $paths The PSR-0 base directories - * - * @return void - */ - public function set($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr0 = (array) $paths; - } else { - $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, - * replacing any others previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param list|string $paths The PSR-4 base directories - * - * @throws \InvalidArgumentException - * - * @return void - */ - public function setPsr4($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr4 = (array) $paths; - } else { - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; - } - } - - /** - * Turns on searching the include path for class files. - * - * @param bool $useIncludePath - * - * @return void - */ - public function setUseIncludePath($useIncludePath) - { - $this->useIncludePath = $useIncludePath; - } - - /** - * Can be used to check if the autoloader uses the include path to check - * for classes. - * - * @return bool - */ - public function getUseIncludePath() - { - return $this->useIncludePath; - } - - /** - * Turns off searching the prefix and fallback directories for classes - * that have not been registered with the class map. - * - * @param bool $classMapAuthoritative - * - * @return void - */ - public function setClassMapAuthoritative($classMapAuthoritative) - { - $this->classMapAuthoritative = $classMapAuthoritative; - } - - /** - * Should class lookup fail if not found in the current class map? - * - * @return bool - */ - public function isClassMapAuthoritative() - { - return $this->classMapAuthoritative; - } - - /** - * APCu prefix to use to cache found/not-found classes, if the extension is enabled. - * - * @param string|null $apcuPrefix - * - * @return void - */ - public function setApcuPrefix($apcuPrefix) - { - $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; - } - - /** - * The APCu prefix in use, or null if APCu caching is not enabled. - * - * @return string|null - */ - public function getApcuPrefix() - { - return $this->apcuPrefix; - } - - /** - * Registers this instance as an autoloader. - * - * @param bool $prepend Whether to prepend the autoloader or not - * - * @return void - */ - public function register($prepend = false) - { - spl_autoload_register(array($this, 'loadClass'), true, $prepend); - - if (null === $this->vendorDir) { - return; - } - - if ($prepend) { - self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; - } else { - unset(self::$registeredLoaders[$this->vendorDir]); - self::$registeredLoaders[$this->vendorDir] = $this; - } - } - - /** - * Unregisters this instance as an autoloader. - * - * @return void - */ - public function unregister() - { - spl_autoload_unregister(array($this, 'loadClass')); - - if (null !== $this->vendorDir) { - unset(self::$registeredLoaders[$this->vendorDir]); - } - } - - /** - * Loads the given class or interface. - * - * @param string $class The name of the class - * @return true|null True if loaded, null otherwise - */ - public function loadClass($class) - { - if ($file = $this->findFile($class)) { - $includeFile = self::$includeFile; - $includeFile($file); - - return true; - } - - return null; - } - - /** - * Finds the path to the file where the class is defined. - * - * @param string $class The name of the class - * - * @return string|false The path if found, false otherwise - */ - public function findFile($class) - { - // class map lookup - if (isset($this->classMap[$class])) { - return $this->classMap[$class]; - } - if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { - return false; - } - if (null !== $this->apcuPrefix) { - $file = apcu_fetch($this->apcuPrefix.$class, $hit); - if ($hit) { - return $file; - } - } - - $file = $this->findFileWithExtension($class, '.php'); - - // Search for Hack files if we are running on HHVM - if (false === $file && defined('HHVM_VERSION')) { - $file = $this->findFileWithExtension($class, '.hh'); - } - - if (null !== $this->apcuPrefix) { - apcu_add($this->apcuPrefix.$class, $file); - } - - if (false === $file) { - // Remember that this class does not exist. - $this->missingClasses[$class] = true; - } - - return $file; - } - - /** - * Returns the currently registered loaders keyed by their corresponding vendor directories. - * - * @return array - */ - public static function getRegisteredLoaders() - { - return self::$registeredLoaders; - } - - /** - * @param string $class - * @param string $ext - * @return string|false - */ - private function findFileWithExtension($class, $ext) - { - // PSR-4 lookup - $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; - - $first = $class[0]; - if (isset($this->prefixLengthsPsr4[$first])) { - $subPath = $class; - while (false !== $lastPos = strrpos($subPath, '\\')) { - $subPath = substr($subPath, 0, $lastPos); - $search = $subPath . '\\'; - if (isset($this->prefixDirsPsr4[$search])) { - $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); - foreach ($this->prefixDirsPsr4[$search] as $dir) { - if (file_exists($file = $dir . $pathEnd)) { - return $file; - } - } - } - } - } - - // PSR-4 fallback dirs - foreach ($this->fallbackDirsPsr4 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { - return $file; - } - } - - // PSR-0 lookup - if (false !== $pos = strrpos($class, '\\')) { - // namespaced class name - $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) - . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); - } else { - // PEAR-like class name - $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; - } - - if (isset($this->prefixesPsr0[$first])) { - foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { - if (0 === strpos($class, $prefix)) { - foreach ($dirs as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - } - } - } - - // PSR-0 fallback dirs - foreach ($this->fallbackDirsPsr0 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - - // PSR-0 include paths. - if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { - return $file; - } - - return false; - } - - /** - * @return void - */ - private static function initializeIncludeClosure() - { - if (self::$includeFile !== null) { - return; - } - - /** - * Scope isolated include. - * - * Prevents access to $this/self from included files. - * - * @param string $file - * @return void - */ - self::$includeFile = \Closure::bind(static function($file) { - include $file; - }, null, null); - } -} diff --git a/vendor/composer/LICENSE b/vendor/composer/LICENSE deleted file mode 100644 index f27399a..0000000 --- a/vendor/composer/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ - -Copyright (c) Nils Adermann, Jordi Boggiano - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php deleted file mode 100644 index 0fb0a2c..0000000 --- a/vendor/composer/autoload_classmap.php +++ /dev/null @@ -1,10 +0,0 @@ - $vendorDir . '/composer/InstalledVersions.php', -); diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php deleted file mode 100644 index 15a2ff3..0000000 --- a/vendor/composer/autoload_namespaces.php +++ /dev/null @@ -1,9 +0,0 @@ - array($baseDir . '/src'), -); diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php deleted file mode 100644 index f82ac6e..0000000 --- a/vendor/composer/autoload_real.php +++ /dev/null @@ -1,36 +0,0 @@ -register(true); - - return $loader; - } -} diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php deleted file mode 100644 index 7a21546..0000000 --- a/vendor/composer/autoload_static.php +++ /dev/null @@ -1,36 +0,0 @@ - - array ( - 'Hp\\Test\\' => 8, - ), - ); - - public static $prefixDirsPsr4 = array ( - 'Hp\\Test\\' => - array ( - 0 => __DIR__ . '/../..' . '/src', - ), - ); - - public static $classMap = array ( - 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', - ); - - public static function getInitializer(ClassLoader $loader) - { - return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInit3bc055e7cfe85029886df43c57958e8c::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInit3bc055e7cfe85029886df43c57958e8c::$prefixDirsPsr4; - $loader->classMap = ComposerStaticInit3bc055e7cfe85029886df43c57958e8c::$classMap; - - }, null, ClassLoader::class); - } -} -- GitLab From 0b5502d251ffea5c6f621bc669eb90277b1f1598 Mon Sep 17 00:00:00 2001 From: "a.shamavov" Date: Thu, 11 Apr 2024 12:03:33 +0500 Subject: [PATCH 4/5] refactoring --- index.php | 48 ++++++---- public/text.txt | 2 - src/Functions.php | 227 ++++++++++++++++++++++++++-------------------- 3 files changed, 160 insertions(+), 117 deletions(-) delete mode 100644 public/text.txt diff --git a/index.php b/index.php index b79a2f6..35c6d1f 100644 --- a/index.php +++ b/index.php @@ -2,8 +2,9 @@ require_once __DIR__ . '/vendor/autoload.php'; -$func = new Hp\Test\Functions(); +use Hp\Test\Functions; +$func = new Functions(); ?> @@ -17,11 +18,11 @@ $func = new Hp\Test\Functions();

Function 1

10, 'count'=>2], - ['price'=>5, 'count'=>5], - ['price'=>8, 'count'=>5], - ['price'=>12, 'count'=>4], - ['price'=>8, 'count'=>4], + ['price'=>10, 'count'=>2], + ['price'=>5, 'count'=>5], + ['price'=>8, 'count'=>5], + ['price'=>12, 'count'=>4], + ['price'=>8, 'count'=>4], ]; print_r($func->sortPrice($array)); ?> @@ -29,25 +30,27 @@ $func = new Hp\Test\Functions();

Function 2

10, 'name'=>'Jhon', 'age'=>23], - ['id'=>32, 'name'=>'Alex', 'age'=>34], - ['id'=>54, 'name'=>'Bob', 'age'=>45], + ['id'=>10, 'name'=>'Jhon', 'age'=>23], + ['id'=>32, 'name'=>'Alex', 'age'=>34], + ['id'=>54, 'name'=>'Bob', 'age'=>45], ['id'=>6, 'name'=>'Mike', 'age'=>61], ]; print_r($func->search($array, 54)); ?> +

Function 3

uniqElements($arr)); ?> +

Function 4

'Товары для ухода за одеждой','depth' => 1,], ['name' => 'Аксессуары для техники','depth' => 1,], ['name' => 'Товары для дома и кухни','depth' => 0,], - ['name' => 'Посуда','depth' => 1,], - ]; + ['name' => 'Посуда','depth' => 1,], + ]; print_r($func->prepareMenu($aMenu)); ?>

Function 5

До НГ: "); - print($func->howDaysToNy(new DateTimeImmutable())); + print "

До НГ:

"; + try { + print $func->howDaysToNy(new DateTimeImmutable()); + } catch (Exception $e) { + print $e->getMessage(); + } ?> -

Function 6

+ +

Function 6

Пятницы 13: "); - foreach($func->countFriday13(2024) as $date) { - print($date->format("Y-m-d l") . "\n"); + print "

Пятницы 13:

"; + try { + foreach ($func->countFriday13(2024) as $date) { + print $date->format("Y-m-d l") . "\n"; } + } catch (Exception $e) { + print $e->getMessage(); + } ?> \ No newline at end of file diff --git a/public/text.txt b/public/text.txt deleted file mode 100644 index 58f1226..0000000 --- a/public/text.txt +++ /dev/null @@ -1,2 +0,0 @@ -Раз, два, три, четыре, -Пять, шесть, семь, восемь. \ No newline at end of file diff --git a/src/Functions.php b/src/Functions.php index 40975a1..a78ddd5 100644 --- a/src/Functions.php +++ b/src/Functions.php @@ -1,74 +1,97 @@ 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,61 +108,71 @@ 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; } - /** - * Вернет все пятницы 13 в году - * @param int $yaer год, в котором необходимо произвести расчет - * @return DateTimeImmutable[] - */ - function countFriday13(int $year): iterable { - $stardDate = new DateTime("{$year}-01-01 Friday"); - $year += 1; - $endDate = new DateTime("{$year}-01-01"); + + /** + * Вернет все пятницы 13 в году + * @param int $year год, в котором необходимо произвести расчет + * @return DateTimeImmutable[] + * @throws Exception + */ + + public function countFriday13(int $year): iterable + { + $startDate = new DateTime("$year-01-01 Friday"); + ++$year; + $endDate = new DateTime("$year-01-01"); $interval = new DateInterval('P7D'); - foreach(new DatePeriod($stardDate, $interval, $endDate) as $day) { + foreach (new DatePeriod($startDate, $interval, $endDate) as $day) { yield new DateTimeImmutable($day->format("Y-m-d")); } } -- GitLab From 1d45f52c52559478ae7f107bdb314300fe63e44c Mon Sep 17 00:00:00 2001 From: "a.shamavov" Date: Thu, 11 Apr 2024 12:05:25 +0500 Subject: [PATCH 5/5] gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49ce3c1 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/vendor \ No newline at end of file -- GitLab