[PHP] Фиксированная сортировка массива на основе хэша

Протестировать можно тут — PHP Sandbox

function hash_sort($array, $hash_string){
  $output = array();
  $used_keys = array();
  $circle = 0;
  sort($array);
  $hash = str_split(preg_replace("/[^0-9]/", '', sha1($hash_string)));

  for($i = 0; $i <= 9; $i++){
    if(!in_array($i, $hash)){
      $hash[] = $i;
    }
  }
  $temp_hash = $hash;
  while(count($output) < count($array)){
    if(count($temp_hash) == 0){
      $temp_hash = $hash;
      $circle++;
    }
    $key = intval($circle.array_pop($temp_hash));
    if(!in_array($key, $used_keys) AND !empty($array[$key])){
      $output[] = $array[$key];
      $used_keys[] = $key;
    }
  }
  return $output;
}

// Тест
$test_array = array();
for($i = 0; $i < 5; $i++){
    $test_array[] = "item ".$i;
}

//Случайный порядок
print_r(hash_sort($test_array, "qwerty"));
//Случайный порядок
print_r(hash_sort($test_array, "12345"));
//Случайный порядок, но такой же, как и с предедущи ключем
print_r(hash_sort($test_array, "12345"));

Комментарии (0)

  1. Напишите первый комментарий
*Комментарий будет опубликован после проверки модератором

[MODx] Генератор настроек MIGX

[MODx, MIGx] Документация на русском по MIGX

[MODX] Импорт и экспорт в MiniShop2. Реализация 1

[MODx] minishop2 tips

[JS] Маска для ввода телефона +7(___)___-__-__

[MODx, miniShop2] Генерация YML для выгрузки в маркет

Как включить HTTPS (SSL) в MODX - Подробная инструкция

[MODx] Подсказки по API

[OpenCart] Вывести на главную все категории с картинками

[MODx, MIGX] Примеры использования

[MODx] Сайт на обслуживании (выключить сайт)

Универсальная форма обратной связи — feedBackForm

[MODx, Gallery] Галерея. Вывести обложки альбомов и фотографии

[PHP, JSON] Пример перевода с помощью Yandex Translate API

Расширение свойств товаров minishop2

[Opencart] Вернуть английский язык, если вы его удалили

[OpenCart] Вывести модуль напрямую через контроллер

[MODx, Quip] Более рабочий вариант.

[MODX, MIGX] Вывести getImageList только если он не пустой

[MODX, MIGX] Тип поля "Список ресурсов" (resourcelist) с ограничением по родителю (parents)

Красивое адаптивное меню под pdoMenu

[MODx] Создать источник файлов

[MODx] Вывод tv-параметров в формате [название TV] - [значение TV]

[PHP] Простое логирование

[MODX] Вывести список всех опций MiniShop2

Все записи