1
0
Files
breadcrumb-the-shire/lib/Repository/Support/RepositoryArrayHelper.php

74 lines
1.8 KiB
PHP

<?php
namespace MintyPHP\Repository\Support;
final class RepositoryArrayHelper
{
/**
* Unwrap a single DB row from its table-name wrapper.
*
* MintyPHP DB layer returns rows wrapped in table-name keys, e.g. ['tenants' => [...]].
* This extracts the inner array for the given table key.
*/
public static function unwrap(?array $row, string $tableKey): ?array
{
if (!$row) {
return null;
}
return $row[$tableKey] ?? null;
}
/**
* Unwrap a list of DB rows from their table-name wrappers.
*/
public static function unwrapList(mixed $rows, string $tableKey): array
{
if (!is_array($rows)) {
return [];
}
$list = [];
foreach ($rows as $row) {
$data = $row[$tableKey] ?? null;
if (is_array($data)) {
$list[] = $data;
}
}
return $list;
}
/**
* Extract integer IDs from DB rows, unwrapping the table-name key.
*
* Returns a deduplicated array of unique positive integer IDs.
*/
public static function extractIds(mixed $rows, string $tableKey, string $idField = 'id'): array
{
if (!is_array($rows)) {
return [];
}
$ids = [];
foreach ($rows as $row) {
$data = $row[$tableKey] ?? $row;
if (is_array($data) && isset($data[$idField])) {
$ids[] = (int) $data[$idField];
}
}
return array_values(array_unique($ids));
}
/**
* Sanitize an array of IDs to unique positive integers.
*/
public static function sanitizePositiveIds(array $ids): array
{
$ids = array_values(array_unique(array_map('intval', $ids)));
return array_values(array_filter($ids, static fn (int $id): bool => $id > 0));
}
}