From c623b435e9b332eac829689b183107cf81713d11 Mon Sep 17 00:00:00 2001 From: babaev-an Date: Wed, 5 Feb 2025 23:46:00 +0300 Subject: [PATCH] 20250205-1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit + [ObjectArray]: Добавлена функция First для получения первого объекта из массива объектов. + [ObjectArray]: Добавлена функция Last для получения последнего объекта из массива объектов. --- .../ObjectArray/ObjectArrayLINQTrait.php | 44 ++++++++++++++++++- tests/classes/ObjectArrayTest.php | 40 +++++++++++++++++ 2 files changed, 83 insertions(+), 1 deletion(-) diff --git a/sources/traits/ObjectArray/ObjectArrayLINQTrait.php b/sources/traits/ObjectArray/ObjectArrayLINQTrait.php index 616a163..1fd0867 100644 --- a/sources/traits/ObjectArray/ObjectArrayLINQTrait.php +++ b/sources/traits/ObjectArray/ObjectArrayLINQTrait.php @@ -172,7 +172,7 @@ trait ObjectArrayLINQTrait /** * Заменяет данные в строке\ массива. * - * @param mixed $setItem Заменяемые элемент. + * @param array $setItems Заменяемые элементы. * @param callable $wherePredicate Условие выборки fn (mixed $item): bool, которое проверяет, * подходит элемент или нет. * @@ -280,4 +280,46 @@ trait ObjectArrayLINQTrait // Возвращаем результат return $result; } + + /** + * Возвращает первый элемент массива или значение по умолчанию. + * + * @param mixed|null $default Значение по умолчанию. По умолчанию, null. + * + * @return mixed|null Возвращает первый элемент массива или значение по умолчанию. + */ + public function First (mixed $default = null): mixed + { + // Получение первого элемента + $firstElement = reset($this->Container); + + // Проверяем получение + if ($firstElement === false) + // - возвращаем значение по умолчанию + return $default; + + // Возвращаем первый элемент + return $firstElement; + } + + /** + * Возвращает последний элемент массива или значение по умолчанию. + * + * @param mixed|null $default Значение по умолчанию. По умолчанию, null. + * + * @return mixed|null Возвращает последний элемент массива или значение по умолчанию. + */ + public function Last (mixed $default = null): mixed + { + // Получение последнего элемента + $lastElement = end($this->Container); + + // Проверяем получение + if ($lastElement === false) + // - возвращаем значение по умолчанию + return $default; + + // Возвращаем первый элемент + return $lastElement; + } } \ No newline at end of file diff --git a/tests/classes/ObjectArrayTest.php b/tests/classes/ObjectArrayTest.php index b0fc351..a5763ea 100644 --- a/tests/classes/ObjectArrayTest.php +++ b/tests/classes/ObjectArrayTest.php @@ -312,4 +312,44 @@ class ObjectArrayTest extends TestCase $this->assertEquals('a', $sr->a); $this->assertTrue($sr->c); } + + public function testFirst () + { + $this->PrepareForTest(); + + $array = [ + new A("a", 3, true), + new A("c", 2, false), + new A("b", 1, true), + ]; + + $a_Array = new ObjectArray($array); + + $sr = $a_Array->First(); + + $this->assertNotNull($sr); + $this->assertInstanceOf(A::class, $sr); + $this->assertEquals('a', $sr->a); + $this->assertTrue($sr->c); + } + + public function testLast () + { + $this->PrepareForTest(); + + $array = [ + new A("a", 3, true), + new A("c", 2, false), + new A("b", 1, true), + ]; + + $a_Array = new ObjectArray($array); + + $sr = $a_Array->Last(); + + $this->assertNotNull($sr); + $this->assertInstanceOf(A::class, $sr); + $this->assertEquals('b', $sr->a); + $this->assertTrue($sr->c); + } } \ No newline at end of file