Гарантирует ли данный код уникальность элемента по отношению к массиву?
Создаю ключи с помощью $unique = uniqid()
Однако, согласно тестам, это не гарантирует 100% уникальность.
$arr - многомерный массив, выгруженный из базы данных
Необходимо гарантированно создавать уникальный ключ по отношению ко всем другим ключам.
Гарантирует ли уникальность такой перебор и сравнение с каждым существующим ключем?
uniqid() отсчитывает только вперед, поэтому количество прогонов = количество элементов в массиве.
Это самая грубая ситуация, когда вообще все элементы совпали =)
$arr = R::getAll('SELECT `title` FROM `itemscategory` WHERE `id_user` = 100');
$unique = "5e9dfcc49a460"; // существующий key
for ($i = 0; $i < count($arr); $i++) {
if (!in_array(['title' => $unique], $arr)) {
echo $unique;
echo " <- ";
echo " Уникальное";
break;
} else {
echo $unique;
echo " <- ";
echo " Есть дубль";
echo " \n ";
$unique = uniqid();
}
}
// Итого выводится на странице:
// 5e9dfcc49a460 <- Есть дубль
// 5e9e22f523312 <- Уникальное
var_dump($arr)
array(4) {
[0]=>
array(1) {
["title"]=>
string(13) "5e9dfcc295981"
}
[1]=>
array(1) {
["title"]=>
string(13) "5e9dfcc49a460"
}
[2]=>
array(1) {
["title"]=>
string(13) "5e9dfcc5b1ff8"
}
[3]=>
array(1) {
["title"]=>
string(13) "5e9dfcc637f75"
}
}
Ответы (1 шт):
Если вопрос в этом:
Гарантирует ли уникальность такой перебор и сравнение с каждым существующим ключем?
То да, уникальность такой метод гарантирует, однако, не до бесконечного числа итераций.