PDA

View Full Version : ایجاد نقطه بازگشت در php



mohammad-gh
جمعه 23 دی 1390, 20:30 عصر
با سلام
حلقه ای نوشتم که با اون 4 عدد تصادفی بین 1 تا 10 رو پیدا کنم
حلقه عدد تکراری رو مشخص می کنه و توی آرایه نمیریزه اما نمی دونم چطور مشخص کنم که اگر عدد تکراری بود از اول این کار رو تکرار کنه!

این هم کد من :


for($i=1;$i<5;$i++){
// label 1
$tmp=mt_rand(1,10);
if(!in_array($tmp,$randoms)){
$randoms[$i] = $tmp;
}else{
// label1
}
}

شاید درست نشون نده این طور هم آوردم !


for($i=1;$i<5;$i++){
// label 1
$tmp=mt_rand(1,10);
if(!in_array($tmp,$randoms)){
$randoms[$i] = $tmp;
}else{
// label1
}
}

منظورم از lable نقطه بازگشت به اون محل هست ، اگر دوستان نظر بهتری برای ایجاد 4 اعدد غیر تکراری دارن استفاده می کنیم!

امیـرحسین
جمعه 23 دی 1390, 20:46 عصر
با While. یه چیزی شبیه این:

$randoms = array();
$count = 1;
while($count<5){
$tmp = mt_rand(1,10);
if(!in_array($tmp,$randoms)) {
$randoms[] = $tmp;
$count++;
} else {
$randoms = array();
$count = 1;
}
}

امیـرحسین
جمعه 23 دی 1390, 21:06 عصر
تو PHP 5.3 میشه روش سنتی goto هم استفاده کرد که یکم زشته:

createRandoms:
$randoms = array();
for($i=1; $i<5; $i++){
$tmp = mt_rand(1,10);
if(!in_array($tmp,$randoms))
$randoms[] = $tmp;
else
break;
}
if(count($randoms)<4)
goto createRandoms;

Unique
جمعه 23 دی 1390, 23:31 عصر
$rands = array();
while(count($rands) < 4){
$r = mt_rand(1,10);
if (!in_array($r,$rands))
$rands[] = $r;
}
print_r($rands);

tux-world
جمعه 23 دی 1390, 23:59 عصر
تو نسخه جدید php این قابلیت رو گذاشتن که یه برچسب تعریف میکنید مثل label: بعد ... اگه درست منظورتون رو متوجه شده باشم

MMSHFE
شنبه 24 دی 1390, 13:24 عصر
$randoms = array();
for($i = 1; $i < 5; $i++) {
do {
$tmp = mt_rand(1, 10);
} while(in_array($tmp, $randoms);
$randoms[$i] = $tmp;
}