Искать в массиве можно так:
if (0 === count(array_filter($arr, function($el) use ($unique) {return $el['key'] == $unique;}))) {
// йее, уникальное!
} else {
// нашлись с таким значением
}
Фикс по-быстрому: добавить параметры:
uniqid('', TRUE)
Это повысит «уникальность» генерируемых значений и риск повторов.
Решение «на авось»: генерить и записывать в БД. Посчитать число строк, и число строк с
DISTINCT `key`
— они не совпадут, если были повторы.
Решение paranoid android: цикл. Генерировать, проверять, в случае опять-неуникальности повторять. Завести счётчик неудачных попыток. С сожалением вываливаться в Exception при превышении 1 млн. неудачных попыток создать что-то уникальное.