Этот вопрос закрыт для ответов, так как повторяет вопрос Как сгенерировать уникальный элемент по отношению к массиву?
Mesuti
@Mesuti

Как правильно выбрать уникальное значение по отношению к массиву, выгруженному из базы данных?

При добавлении элемента в базу данных, необходимо назначать ему уникальный ключ.
Числовой не подходит, так как можно простым перебором спарсить все товары.

Как правильно сделать цикл проверки на уникальность?
Который будет генерировать ключ до тех пор, пока не будет дублей.

uniqid(); генерирует подходящие ключи, однако не гарантирует уникальность значения, поэтому решил сделать проверку с имеющимися ключами.

Выгружаю из базы данных столбец с ключами
$arrayAllKey = R::getAll('SELECT `category_key` FROM `items` WHERE `id_user` = 104);

O8UMzbN4oeNXzJYDNTmbreNvPLZ4PT6ctFyUmMR0

Как уже подсказали, перебор и сравнение каждого элемента массива будет ресурсозатратно при большом количестве данных.
Поэтому оптимальный вариант - выбор конкретного значения из базы данных.

Безуспешно сделал такой код, где
$unique - ключ. генерируется с помощью uniqid()
$arrayAllKey - массив существующих ключей
$findedKey- выбор ячейки из базы данных с ключом
$arrayAllKey[0]["category_key"] - значение найденного ключа $findedKey
// Указываю существующий ключ, чтобы цикл нашел дубль
$unique = "5e9dfcc637f75"; 

// Берем значение сгенерированного ключа $unique
// Если найдет значение, то выдаст его, если нет, ничего не выдаст
$findedKey = R::getAll('SELECT `category_key` FROM `items` WHERE `id_user` = ? and `category_key` = ?', [104, $unique]); 

// Если значение найденного ключа есть
if ($findedKey[0]["category_key"]) {
    // делаем генерацию нового ключа
    $unique = uniqid(); 
    // снова выбираем значение из бд
    $findedKey = R::getAll('SELECT `category_key` FROM `items` WHERE `id_user` = ? and `category_key` = ?', [104, $unique]);
} else {
    // если дублей не найдено, выводим уникальный ключ
    echo $unique;
};


p.s.
Стоить только конкретная цель. Без альтернатив.
Сгенерировать ключ, проверить уникальность по сравнению с выгрузкой из БД и записать в БД, если он уникальный..
  • Вопрос задан
  • 87 просмотров
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
UUID v4 вас спасёт.
P.S. Но захотят спарсить - спарсят. Просто возьмут список товаров прямо с вашей страницы. Вы ведь собираетесь их все где-то публиковать.
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
Товары твои, если они хоть кому-то сто лет в обед понадобятся, спарсят с числовыми, буквенными, буквенно-цифровыми, уникальными, неповторимыми, воображаемыми, скрытыми, секретными, зашифрованными, как угодно спрятанными индексами.

Так что не мучай свой неокрепший мозг, сделай цифровые индексы.
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы