массивы — Специальный случайный алгоритм в переполнении стека

Я пытаюсь написать алгоритм для следующего случая:

  • Есть несколько (N) переменных с числом / строкой (выберите любой тип)
  • есть двумерный массив длиной M:

Пример массива:

$variations = array(
array('1.1', '1.2', '1.3'),
array('2.1', '2.2', '2.3'),
array('3.1', '3.2', '3.3'),
array('4.1', '4.2', '4.3', '4.4'),
array('5.1', '5.2', '5.3'),
array('6.1', '6.2', '6.3'),
array('7.1', '7.2', '7.3'),
...
array('M.1', 'M.2', 'M.3', 'M.4', 'M.5')
);

Для каждой переменной мне нужно получить уникальную комбинацию значений из массива каждого уровня, например:

  • параметр 567, результат 1,2, 2,3, 3,1, 4,1, 5,2, 6,1, 7,3, … M.4
  • параметр равен 1000, результат равен 1,3, 2,1, 3,3, 4,3, 5,1, 6,2, 7,1, … M.1
  • параметр 567, результат 1,2, 2,3, 3,1, 4,1, 5,2, 6,1, 7,3, … M.4

ОБНОВЛЕНИЕ: результат должен быть таким же, если я снова предоставлю одно и то же значение параметра.

У кого-нибудь есть предложения?

0

Решение

Звучит так, как будто вы хотите выбрать один случайный элемент из каждого под-массива:

srand($param);
foreach($variations as $values) {
$result[] = $values[array_rand($values)];
}
// if you want a string list instead of an array
$result = implode(',', $result);
// reset the random seed
srand();
2

Другие решения

Если вы хотите случайно выбрать один из массивов в $variations массив, вы можете перебрать их и выбрать что-то в зависимости от количества значений.

<?php

$variations = array(
array('1.1', '1.2', '1.3'),
array('2.1', '2.2', '2.3'),
array('3.1', '3.2', '3.3'),
array('4.1', '4.2', '4.3', '4.4'),
array('5.1', '5.2', '5.3'),
array('6.1', '6.2', '6.3'),
array('7.1', '7.2', '7.3'),
array('M.1', 'M.2', 'M.3', 'M.4', 'M.5')
);

$unique = array();
foreach ($variations as $arr) {
$unique[] = $arr[rand(0, (count($arr) - 1))];
}

print_r($unique);
0

То, что вы просите, это pseudo random number generator потому что число зависит от исходного семени.

srand(1001); // seeding the random number
print_r(rand()); // run it 10x, always the same result.

Если вы предоставите число, скажем, X, у вас есть srand(D+X+1); .... srand(D+X+M); семена где D=initial number, И с каждым srand() а также rand() вывод, используйте это, чтобы перемешать этот конкретный массив и выбрать число.

Как «сделать в случайном порядке»? Например, можно сложить все цифры (4 + 6 + 9 + 3 + 5 + 3 + 9 + 3 + 2 = 44) и начать подсчет 44-го элемента (то есть: 44 mod [# элемента в массиве] )

0