Как правильно получить разницу новых сгенерированных уникальных идентификаторов и полный список всех идентификаторов?

У меня есть образец функции для генерации уникальных идентификаторов:

function generate_uuid($needed_ids_num = 1, int $random_bytes_length = 6)
{
$ids = [];
while (count($ids) < $needed_ids_num) {
$id = bin2hex(random_bytes($random_bytes_length));

if (!isset($ids[$id])) $ids[$id] = true;
}
$ids = array_keys($ids);
return $ids;
}

У меня есть эти уникальные идентификаторы в базе данных:

$ids_from_database = array(
'ad5dcc895ddc',
'3d036129b5b4',
'db569298c1ea',
'f919a34b31db'
);

Как я могу сгенерировать уникальный идентификатор, сравнивая уже существующие идентификаторы из базы данных?

Моя переписанная вариантная функция — это образец:

function generate_uuid(array $ids_from_database, int $needed_new_ids = 1, int $random_bytes_length = 6)
{
$temp = $ids;
$needed_ids_num = count($ids) + $needed_ids;
while (count($ids) < $needed_ids_num) {
$id = bin2hex(random_bytes($random_bytes_length));

if (!isset($ids[$id])) $ids[$id] = true;
}
$ids = array_keys($ids);
$result = array_diff($ids, $temp);
return [
'new_uuid' => $result,
'ids' => $ids
];
}

Почему моя написанная функция не возвращает массив результатов в неверном варианте?

1

Решение

Если я не понял вашу проблему, я думаю, что ваша первая функция была в порядке, просто нужно передать идентификаторы, которые вы получили от db в этом случае $ids_from_database, Просто вычислите разницу между массивом array_diff() и передать результат с уникальными идентификаторами и всеми идентификаторами базы данных. Надеюсь, это поможет.

<?php
function generate_uuid(array $ids_from_database, int $needed_ids_num = 1, int $random_bytes_length = 6)
{
$temp = $ids_from_database;
$ids = [];
while (count($ids) < $needed_ids_num) {
$id = bin2hex(random_bytes($random_bytes_length));
if (!isset($ids[$id])) $ids[$id] = true;
}
$result = array_diff($ids, $temp);
return [
'new_uuid' => $result,
'ids' => $temp
];
}
$ids_from_database = array(
'ad5dcc895ddc',
'3d036129b5b4',
'db569298c1ea',
'f919a34b31db'
);
$generated_ids = generate_uuid($ids_from_database);
print '<pre>';
print_r($generated_ids);
print '</pre>';
?>

DEMO: https://eval.in/1029502

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector