Сортировка файлов (строк) по 4 массивам - PullRequest
0 голосов
/ 16 апреля 2010

Мне нужна функция, которая позволит мне отсортировать несколько имен файлов по 4 массивам.Однако файл должен всегда находиться в одном и том же массиве - даже если количество файлов меняется.

Например, если у меня есть файлы myfile.html anotherfile.html morefiles.html test.html

и мои массивы array1, array2, array3, array4

Если я запусту эту функцию, то array1 может получить myfile.html и anotherfile.html

Если я запустите ее снова и добавлю еще несколько файловили меньше файлов, например, не передавайте anotherfile.html), тогда я все же ожидал бы, что array1 получит myfile.html

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

1 Ответ

2 голосов
/ 16 апреля 2010

Существует много разных способов решения такой задачи, как показано ниже: очень базовое введение в тему. Если это полезно, отлично, в противном случае я надеюсь, что это хотя бы даст представление о том, куда вы можете пойти (или нет!).

Этот простой пример принимает хеш имени файла (в данном случае MD5 только потому, что вы, вероятно, знакомы с ним). sscanf просто получает первый символ хэша и превращает его в число от 0 до 15 (поскольку md5 () возвращает шестнадцатеричное число). Поскольку мы хотим распределить только между четырьмя массивами, оператор модуля (%) используется так, что $num всегда будет приводить к 0, 1, 2 или 3, который затем используется в качестве ключа массива (см. Ваш $ array1, $ массив2 и т. д.).

$files = array('a.html','b.html','c.html','d.html');
$arrays = 4;
$array = array_fill(0, $arrays, array());
// For each file name put it into the appropriate slot in $array
foreach ($files as $filename) {
    sscanf(md5($filename), '%1x', $hex);
    $key = $hex % $arrays;
    $array[$key][] = $filename;
}
// See what happened
var_dump($array);

Для этого конкретного примера результирующий массив (который вы можете вставить в отдельные переменные, если хотите) имеет следующую структуру:

$array = array(
    0 => array()
    1 => array('c.html')
    2 => array('d.html')
    3 => array('a.html', 'b.html')
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...