2015-01-09 2 views
1

У меня есть таблица соединений в базе данных, которая связывает разные сущности вместе и может храниться в любом порядке. Таким образом, вы могли бы:Создать хеш для уникальной комбинации

|column1|column2| 
+-------+-------+ 
12345 |67890 

или

|column1|column2| 
+-------+-------+ 
67890 |12345 

Это будет рассматриваться как же ассоциации, порядок не имеет значения.

Мне любопытно, как создать хэш, который будет одинаковым независимо от того, в каком порядке передавались идентификаторы.

Это лучшее, что я могу думать:

function relationship_hash() 
{ 
    $params = func_get_args(); 
    sort($params); 
    return md5(implode(',', $params)); 
} 

Так relationship_hash (12345,67890) и relationship_hash (67890,12345) будет одновременно генерировать тот же хэш. Это может принимать любое количество значений и находить хэш для этой комбинации.

Независимо от того, эффективен ли проект базы данных, я просто интересуюсь методами генерации хэша для такого рода прецедентов.

+2

Я думаю, что сортировка их ответила на ваш вопрос. Пока хэш генерируется со значениями в PHP, он является золотым. –

ответ

2

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

function relationship_hash($n1, $n2) { 
    $ret = $n1*$n2+((abs($n1-$n2)-1)^2)/4; 
    return md5($ret); // maybe you don't want to use md5 for this 
} 

echo relationship_hash(12345, 67890), "\n"; // 75071b9bb02d1d75350bd6b926f323f8 
echo relationship_hash(67890, 12345), "\n"; // 75071b9bb02d1d75350bd6b926f323f8 
Смежные вопросы