Как создать группу для строки / имени файла? - PullRequest
0 голосов
/ 26 сентября 2011

ОК, я новичок в stackoverflow.

Разрабатывая сайт электронной коммерции, у меня есть 50 уникальных изображений на главной странице, которые необходимо загрузить. Я использую Amazon CDN для своих изображений, и все эти файлы находятся в ведре с уникальным доменом.

Я хотел бы, чтобы несколько доменов были сопоставлены с этим сегментом. Однако для каждого изображения я должен быть в состоянии найти во время выполнения, какой домен он обслуживал в прошлый раз, чтобы кэширование было максимально оптимизировано. Моя идея состоит в том, чтобы иметь функцию func (имя файла), которая может возвращать значение от 0 до 9 каждый раз для одного и того же имени файла. Это может быть использовано для доменного имени.

Я не хочу, чтобы функция была очень тяжелой, как хеш, и в этом случае я бы хотел столкновения, а не избежал его.

Простой метод - использовать intval (имя файла) и затем использовать наименее значащую цифру. Однако я не уверен, что это было бы хорошим решением и был бы сбалансирован спред.

Есть предложения?

1 Ответ

1 голос
/ 26 сентября 2011

Как насчет чего-то простого:

function customHash($str) {
    $hash = 0;

    for ($i = 0; $i < strlen($str); $i++) {
        $hash += ord($str[$i]);
    }

    return $hash % 10;
}

Вы можете оптимизировать это разными способами, например, используя iconv_strlen () для правильной обработки строк utf-8, и вместо всей длины можно использовать $len = max(6, $strlen); (хотя повышение производительности не очень важно ...) .

...