[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. Напишите первый комментарий
*Комментарий будет опубликован после проверки модератором

Похожие статьи

Пример перевода с помощью Yandex Translate API

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

Как поменять версию PHP, используемую в командной строке на Windows

Как контролировать кэш CSS и скриптов

Как поменять язык в Faker

Транслитерация URL в Laravel. Примеры str_slug()

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

Курсы валют с cbr.ru на PHP

Разные фишки, заготовки

Laravel Excel - Базовый экспорт

Получить вложенный массив из плоского

Namespace на примерах - Как понять пространства имен в PHP

Заготовки для автоматического заполнения товарами магазина 1.5.5.1.2

Как сделать middleware в Laravel 6 - простой пример

Как обработать POST данные в PHP

Примеры работы с API

Загрузить файл для постобработки

Получить время выполнения PHP скрипта. Решение в 3 строки кода

Получить курсы валют с cbr.ru на PHP с кэшированием результатов

Экспорт маршрутов из Laravel в JSON файл

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

Вывести список всех файлов на сервере (и размер файла)

Наш сайт использует куки, нажмите «ОК» если вы не против
OK