3 Commits

Author SHA1 Message Date
f247253f9e Merge remote-tracking branch 'origin/master' 2025-02-05 23:46:12 +03:00
c623b435e9 20250205-1
+ [ObjectArray]: Добавлена функция First для получения первого объекта из массива объектов.

+ [ObjectArray]: Добавлена функция Last для получения последнего объекта из массива объектов.
2025-02-05 23:46:00 +03:00
c32c8643ee 20250205
+ [ObjectArray]: Добавлена функция GetColumnCallback для лучшего получения колонки.
2025-02-05 18:54:56 +03:00
2 changed files with 100 additions and 6 deletions

View File

@@ -143,6 +143,22 @@ trait ObjectArrayLINQTrait
* @return array Ассоциированный массив с результатом выборки. * @return array Ассоциированный массив с результатом выборки.
*/ */
public function GetColumn (string $column, ?callable $wherePredicate = null): array public function GetColumn (string $column, ?callable $wherePredicate = null): array
{
return $this->GetColumnCallback(fn ($item) => property_exists($item, $column) ? $item->$column : null,
$wherePredicate);
}
/**
* Получает колонку в массиве данных.
*
* @param callable $columnPredicate Функция <code>fn (mixed $item): mixed</code>, возвращающая значение элемента
* колонки.
* @param callable|null $wherePredicate Условие выборки <code>fn (mixed $item): bool</code>, которое проверяет,
* подходит элемент или нет.
*
* @return array Ассоциированный массив с результатом выборки.
*/
public function GetColumnCallback (callable $columnPredicate, ?callable $wherePredicate = null): array
{ {
// Создаю результат // Создаю результат
$result = []; $result = [];
@@ -153,16 +169,12 @@ trait ObjectArrayLINQTrait
if (!is_object($item)) if (!is_object($item))
continue; continue;
// - пропускаю не имеющие требуемого свойства
if (!property_exists($item, $column))
continue;
// - пропускаю не удовлетворяющие условию // - пропускаю не удовлетворяющие условию
if ($wherePredicate !== null && !$wherePredicate($item)) if ($wherePredicate !== null && !$wherePredicate($item))
continue; continue;
// - добавляю значение свойства в результат // - добавляю значение свойства в результат
$result[] = $item->$column; $result[] = $columnPredicate($item);
} }
// Возвращаю результат // Возвращаю результат
@@ -172,7 +184,7 @@ trait ObjectArrayLINQTrait
/** /**
* Заменяет данные в строке\ массива. * Заменяет данные в строке\ массива.
* *
* @param mixed $setItem Заменяемые элемент. * @param array $setItems Заменяемые элементы.
* @param callable $wherePredicate Условие выборки <code>fn (mixed $item): bool</code>, которое проверяет, * @param callable $wherePredicate Условие выборки <code>fn (mixed $item): bool</code>, которое проверяет,
* подходит элемент или нет. * подходит элемент или нет.
* *
@@ -280,4 +292,46 @@ trait ObjectArrayLINQTrait
// Возвращаем результат // Возвращаем результат
return $result; 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;
}
} }

View File

@@ -312,4 +312,44 @@ class ObjectArrayTest extends TestCase
$this->assertEquals('a', $sr->a); $this->assertEquals('a', $sr->a);
$this->assertTrue($sr->c); $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);
}
} }