我具有用于生成唯一ID的示例功能:
void remove1(int id) {
std::unique_lock<std::shared_mutex> lock(mutex_);
for (auto it = models_.begin(); it != models_.end(); ++it)
if ((*it)->getId() == id)
{
it = models_.erase(it);
return;
{
}
void remove2(int id) {
std::shared_lock<std::shared_mutex> sharedLock(mutex_);
for (auto it = models_.begin(); it != models_.end(); ++it)
if ((*it)->getId() == id)
{
sharedLock.unlock();
std::unique_lock<std::shared_mutex> uniqueLock(mutex_);
models_.erase(it);
return;
}
}
我在数据库上有以下唯一ID:
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'
);
为什么我编写的函数不能以不正确的变体形式返回结果数组?
答案 0 :(得分:0)
如果我没有误解您的问题,我认为您的第一个功能还可以,在这种情况下$ids_from_database
仅需要传递从数据库获得的ID。只需使用array_diff()
计算数组之间的差,然后将结果传递给唯一ID和所有数据库ID。希望对您有所帮助。
<?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>';
?>