|
|
|
รบกวนด้วยครับ การเขียนโปรแกรมรับค่าตัวเลขและสุ่มบันทึกในไฟล์ .txt |
|
|
|
|
|
|
|
ขอบคุณครับ
|
|
|
|
|
Date :
2013-06-12 14:56:37 |
By :
atthaphon |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณครับ กำลังจะถามโจทย์แบบนี้พอดีเลย
แต่ผมลองเอาโค้ดพี่ไปทำดู มันช้ามากครับเวลากำหนดจำนวน n เยอะๆ
ผมลอง 10000 นี่ประมาณ 30 วิ ยิ่ง 100000 นี่มัน error เลยครับ
ทำไมถึงเป็นอย่างนั้น
Code (PHP)
<?php
$file_handle = fopen("mytext.txt", "w"); // สร้าง mytext.txt เอาไว้ด้วย
$max = 10000; // จำนวน n
$min = 1;
$r = array(); // สร้าง array ไว้เก็บค่า random
while(count($r)<$max){ // วนลูปจนกว่าจำนวนค่าใน array จะเท่ากับ $max หรือ n
$rand = mt_rand($min,$max);
if(!in_array($rand,$r)){ // เช็คก่อนว่ามีค่านี้ใน array รึยัง ถ้ายังถึงจะทำเงื่อนไขนี้
$r[] = $rand; // เก็บค่า random ลง array
fwrite($file_handle, $rand."\n"); // เขียนลงไฟล์ ขึ้นบรรทัดใหม่ด้วย
}
}
?>
|
|
|
|
|
Date :
2013-06-12 19:26:09 |
By :
เอริค |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ไม่มีแนวคิดที่ดีกว่านี้เหรอครับ code นี้ช้ามากเลย
|
|
|
|
|
Date :
2013-06-12 20:48:13 |
By :
เอริค |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมเอาไปปรับมาแล้วครับ
Code (PHP)
<?php
$n=$_REQUEST['n'];
if(empty($n)){
echo "
<form method=\"post\" action=\"?\">
<input type=\"text\" name=\"n\"><input type=\"submit\">
</form>
";
}else{
header("Content-Type: plain/text");
header("Content-Disposition: Attachment; filename=data$n.txt");
header("Pragma: no-cache");
$arr="";
for($i=1;$i<=$n;$i++){
if(empty($arr)) $arr[]=$i;
else $arr[].=$i;
}
shuffle($arr);
foreach ($arr as $number) {
echo "$number \r\n";
}
}
?>
|
ประวัติการแก้ไข 2013-06-14 14:26:15 2013-06-14 14:26:57
|
|
|
|
Date :
2013-06-14 14:25:07 |
By :
atthaphon |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ปรับทำไมครับ ของเดิมเขาทำงานเร็วอยู่แล้ว
แบบนี้ช้าลงมาก เพราะไปตรวจเงื่อนไขที่ไม่จำเป็น
for($i=1;$i<=$n;$i++){
if(empty($arr)) $arr[]=$i;
else $arr[].=$i;
}
ไม่ควรใช้ foreach นะครับ ใช้ implode() แบบที่เขาเึขียนตัวอย่างไว้มันเร็วกว่ามากครับ
echo ออกไปเลย
echo implode("\r\n",$arr);
จริงๆ แล้ว PHP มีฟังก์ชั่นสร้างตัวเลขต่อเนื่องนะครับ ชื่อว่า range()
ตามโจทย์ในตอนแรก สามารถเขียนให้เหลือแค่นี้ได้
<?php
$v = range(1, 100000);
shuffle($v);
file_put_contents('data.txt', implode("\n", $v));
|
|
|
|
|
Date :
2013-06-14 14:38:50 |
By :
cookiephp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 05
|