how can i convert a string(i.e. email address) to unique integers, to use them as an ID.
Try the binhex function
from the above site:
<?php
$str = "Hello world!";
echo bin2hex($str) . "<br />";
echo pack("H*",bin2hex($str)) . "<br />";
?>
outputs
48656c6c6f20776f726c6421
Hello world!
The amount of information a PHP integer may store is limited. The amount of information you can store in a string is not (at least if the string isn't unreasonably long.)
Thus you would need to compress your arbitrary-length string to an non-arbitrary-length integer. This is impossible without data loss.
You may use a hashing algorithm, but hashing algorithms may always have collisions. Especially if you want to hash a string to an integer the collision probability is pretty high - integers can store only very little data.
Thus you shall either stick with the email or use an auto incrementing integer field.
If the emails are ascii text, you could use PHP ord function to generate a unique integer, but it will be a very large number!
The approach would be to work through the email address one character at a time, calling ord for each of them. The ord function returns an integer uniquely expressing the character's value. You can pad each of these numbers with zeros and then use string concatenation to plug them into each other.
Consider "abc".
ord("a");
>> 97
ord("b");
>> 98
ord("c");
>> 99
Pad these numbers with a 0, and you have a unique number for it, that is: 970980990
.
I hope that helps!
Why not create your own associative table locally that will bind the emails with unique integers?
So the work flow would be in the lines of:
1 get the record from the ldap server.
2 check it locally if it has already an int assigned.
2.1 if yes use that int.
2.2 if no, generate an associative row in the table locally.
3 do your things with the unique ids.
Does that make sense?