Я хочу написать функцию, возвращающую случайные уникальные пары чисел каждый раз, когда вы вызываете ее из диапазона до ее сброса. Что-то вроде этого:уникальная комбинация массивов
function randomUniquePairs($ranges, $reset = false){
if ($reset === false){
// some code for reseting
}
/*
some code for creating random unique pair numbers
*/
return $result;
}
randomUniquePairs(range(1,10), range(1,20));
/*
this function returns for example:
array(2,9)
*/
randomUniquePairs(range(1,10), range(1,20));
/*
this function returns for example:
array(5,19)
*/
randomUniquePairs(range(1,10), range(1,20));
/*
this function returns for example:
array(5,19)
*/
//this function returns random unique pairs until we pass reset paramer true
Стараюсь два подхода:
1) один них делают все возможные пары затем выбрать из них случайным образом, но это очень неэффективно, потому что если диапазоны настолько широк, он потребляет много памяти. код:
class a {
private $asqar;
function __construct() ($range) {
// cycle for ranges
foreach ($range[0] as $v1) {
foreach ($range[1] as $v2) {
$asqar[] = array(
$v1,
$v2,
);
}
}
}
function randomUniquePairs($reset = false){
if ($reset === true){
$this->asgar = array();
}
$rndKey = array_rand($this->asgar);
$result = $this->asqar[$rndkey];
unset($this->asqar[$rndkey]);
return $result;
}
}
$c = new a(range(1,10), range(1,20));
$c->randomUniquePairs();
2) второе написать функцию, которая производить пару из этих диапазонов, а затем сохранить его в переменной, каждый раз, когда функция вызывает после получения пары, он проверяет, является ли эта пара, произведенных до вызывать функцию рекурсивно, она продолжается до тех пор, пока не создаст уникальную пару. этот код:
class a{
private $__uniqueVariables = array();
public function randomUniquePairs($range, $reset = false) {
if ($reset === true){
$this->__uniqueVariables = array();
}
// cycle for each value
foreach ($range as $value) {
// shuffle
shuffle($value);
// selected id
$selectedId[] = $value[0];
}
// check for selected variable
if (in_array($rndUnqNum, $this->__uniqueVariables)) {
// return for try again
return $this->uniqueVariable($range);
}
// added to current unique variables
$this->__uniqueVariables[] = $rndUnqNum;
// return
return $rndUnqNum;
}
}
но это вопрос, который иногда бросить Fatal error: Maximum function nesting level of '100' reached
.
Мне нужен лучший алгоритм.
когда я пытаюсь этот код, я получаю эту ошибку: Фатальная ошибка: Вызов неопределенной методы A :: B() в test.php на линии 35. Что б (массив ... делать? – Maximus2012