Как правильно получить разницу новых генерируемых уникальных идентификаторов и полный список всех идентификаторов? - PullRequest
0 голосов
/ 28 июня 2018

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

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 Ответ

0 голосов
/ 28 июня 2018

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

<code><?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 '
'; ?>

DEMO: https://eval.in/1029502

...