Compare commits
3 Commits
v1.0.1
...
f247253f9e
Author | SHA1 | Date | |
---|---|---|---|
f247253f9e | |||
c623b435e9 | |||
c32c8643ee |
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user