Я пытаюсь написать алгоритм для следующего случая:
Пример массива:
$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')
);
Для каждой переменной мне нужно получить уникальную комбинацию значений из массива каждого уровня, например:
ОБНОВЛЕНИЕ: результат должен быть таким же, если я снова предоставлю одно и то же значение параметра.
У кого-нибудь есть предложения?
Звучит так, как будто вы хотите выбрать один случайный элемент из каждого под-массива:
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();
Если вы хотите случайно выбрать один из массивов в $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);
То, что вы просите, это 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 [# элемента в массиве] )