@dynambee as it brought collision down rate down, there seems to be a point in it. From a logical stand point, it doesn't make sense to me. But I have to admit, that I am not a pro in statiscal methods.
In general I could not imagine a better way, than doing once rand() and check, if its unique. If the collision rate is exceptional high, it indicates, that this is not really a normal distribution. But as you say since php 7.1 is fine, why dont you just use it then? If you are below PHP 7.1 you can go with mt_rand() direct!?