1
的组合,我想编写返回随机的唯一一对数字每次调用它从一个范围,直至将其复位功能。 事情是这样的:独特的阵列
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
。
我想任何更好的算法。
当我尝试此代码时,出现此错误:致命错误:在第35行的test.php中调用未定义的方法a :: b()。b(array ... do? – Maximus2012