Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,038

HOME > PHP > PHP Forum > รบกวนด้วยครับ การเขียนโปรแกรมรับค่าตัวเลขและสุ่มบันทึกในไฟล์ .txt


[PHP] รบกวนด้วยครับ การเขียนโปรแกรมรับค่าตัวเลขและสุ่มบันทึกในไฟล์ .txt

 
Topic : 096356



โพสกระทู้ ( 18 )
บทความ ( 0 )



สถานะออฟไลน์



รับค่าตัวเลข n เป็นพารามิเตอร์นำเข้า แล้วให้โปรแกรมสุ่มตัวเลขตั้งแต่ 1 ถึง n แต่ค่าของตัวเลขจะไม่เรียงลำดับใด ๆ แล้วเก็บลงแฟ้มข้อความ data.txt โดยเก็บค่าตัวเลข ค่าละ 1 บรรทัด

เวลารันออกมาครับ

3
5
10
9
2
8
4
1
7
6

ประมาณนี้ครับ



Tag : PHP, MySQL

Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2013-06-10 11:38:27 By : atthaphon View : 2576 Reply : 8
 

 

No. 1



โพสกระทู้ ( 3,848 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

สถานะออฟไลน์
Twitter Facebook

ใจจริงแล้วไม่ได้อยากทำสคริปต์ให้น่ะครับ หวังว่าคุณจะเอาไปนั่งคิดต่อให้เข้าใจ
Code (PHP)
01.<?php
02.$file_handle = fopen("mytext.txt", "w");  // สร้าง mytext.txt เอาไว้ด้วย
03.$max = 10;  //  จำนวน n
04.$min = 1;
05.$r = array();  //  สร้าง array ไว้เก็บค่า random
06. 
07.while(count($r)<$max){  //  วนลูปจนกว่าจำนวนค่าใน array จะเท่ากับ $max หรือ n
08.    $rand = mt_rand($min,$max);
09.    if(!in_array($rand,$r)){  // เช็คก่อนว่ามีค่านี้ใน array รึยัง ถ้ายังถึงจะทำเงื่อนไขนี้
10. 
11.                      $r[] = $rand//  เก็บค่า random ลง array
12. 
13.                    fwrite($file_handle, $rand."\n"); // เขียนลงไฟล์ ขึ้นบรรทัดใหม่ด้วย
14.    }
15.}
16.?>


ตัวอย่างผลลัพธ์
Code
9 5 7 4 2 1 10 3 6 8



ประวัติการแก้ไข
2013-06-10 22:42:21
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-06-10 22:39:15 By : mangkunzo
 

 

No. 2



โพสกระทู้ ( 18 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-06-12 14:56:37 By : atthaphon
 

 

No. 3

Guest


ขอบคุณครับ กำลังจะถามโจทย์แบบนี้พอดีเลย
แต่ผมลองเอาโค้ดพี่ไปทำดู มันช้ามากครับเวลากำหนดจำนวน n เยอะๆ
ผมลอง 10000 นี่ประมาณ 30 วิ ยิ่ง 100000 นี่มัน error เลยครับ
ทำไมถึงเป็นอย่างนั้น

Code (PHP)
01.<?php
02.$file_handle = fopen("mytext.txt", "w");  // สร้าง mytext.txt เอาไว้ด้วย
03.$max = 10000;  //  จำนวน n
04.$min = 1;
05.$r = array();  //  สร้าง array ไว้เก็บค่า random
06. 
07.while(count($r)<$max){  //  วนลูปจนกว่าจำนวนค่าใน array จะเท่ากับ $max หรือ n
08.    $rand = mt_rand($min,$max);
09.    if(!in_array($rand,$r)){  // เช็คก่อนว่ามีค่านี้ใน array รึยัง ถ้ายังถึงจะทำเงื่อนไขนี้
10. 
11.                      $r[] = $rand//  เก็บค่า random ลง array
12. 
13.                    fwrite($file_handle, $rand."\n"); // เขียนลงไฟล์ ขึ้นบรรทัดใหม่ด้วย
14.    }
15.}
16.?>

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-06-12 19:26:09 By : เอริค
 

 

No. 4



โพสกระทู้ ( 3,848 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

สถานะออฟไลน์
Twitter Facebook

ตอบความคิดเห็นที่ : 3 เขียนโดย : เอริค เมื่อวันที่ 2013-06-12 19:26:09
รายละเอียดของการตอบ ::
มันเป็นแนวคิดครับ เรื่อง performance ต้องไปหาวิธีปรับเอาเองครับ
และที่มัน error เพราะ php มัน time out ครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-06-12 19:44:35 By : mangkunzo
 

 

No. 5

Guest


ไม่มีแนวคิดที่ดีกว่านี้เหรอครับ code นี้ช้ามากเลย
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-06-12 20:48:13 By : เอริค
 

 

No. 6



โพสกระทู้ ( 3,848 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

สถานะออฟไลน์
Twitter Facebook

ตอบความคิดเห็นที่ : 5 เขียนโดย : เอริค เมื่อวันที่ 2013-06-12 20:48:13
รายละเอียดของการตอบ ::
ส่วนตัวผมคิดว่า ทั้ง rand ทั้งเขียน text ได้แค่นี้ก็ดีแล้ว

แต่....ถ้าดูดีๆ โจทย์ที่ถามไม่ได้ต่างอะไรไปจากการสับไพ่เฉยๆ
ดังนั้น ทำแบบนี้เลยครับ
Code (PHP)
01.ini_set('memory_limit', '1024M'); // เพิ่ม memory ครับ เพราะ array ใหญ่มาก
02. 
03.$file_handle = fopen("mytext.txt", "w");
04.$max = 1000000;
05.$min = 1;
06.$r = array();
07.while($min <= $max){
08.    $r[] = $min; $min++;
09.}
10.shuffle($r);  // สับไพ่ไปเลย อิอิ
11.fwrite($file_handle, implode("\r\n",$r));  // ใชเ้เวลาไป 1.92 s ครับ
12.echo 'Success';




ประวัติการแก้ไข
2013-06-12 22:45:00
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-06-12 22:44:13 By : mangkunzo
 

 

No. 7



โพสกระทู้ ( 18 )
บทความ ( 0 )



สถานะออฟไลน์


ผมเอาไปปรับมาแล้วครับ

Code (PHP)
01.<?php
02.$n=$_REQUEST['n'];
03.if(empty($n)){
04.echo "
05.    <form method=\"post\" action=\"?\">
06.    <input type=\"text\" name=\"n\"><input type=\"submit\">
07.    </form>
08.    ";
09.}else{
10.    header("Content-Type: plain/text");
11.    header("Content-Disposition: Attachment; filename=data$n.txt");
12.    header("Pragma: no-cache");
13.    $arr="";
14.    for($i=1;$i<=$n;$i++){
15.         if(empty($arr)) $arr[]=$i;
16.         else $arr[].=$i;
17.    }
18.    shuffle($arr);
19.    foreach ($arr as $number) {
20.        echo "$number \r\n";
21.    }
22.}
23.?>



ประวัติการแก้ไข
2013-06-14 14:26:15
2013-06-14 14:26:57
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-06-14 14:25:07 By : atthaphon
 

 

No. 8



โพสกระทู้ ( 1,819 )
บทความ ( 20 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Facebook

ปรับทำไมครับ ของเดิมเขาทำงานเร็วอยู่แล้ว

แบบนี้ช้าลงมาก เพราะไปตรวจเงื่อนไขที่ไม่จำเป็น
1.for($i=1;$i<=$n;$i++){
2.    if(empty($arr)) $arr[]=$i;
3.    else $arr[].=$i;
4.}


ไม่ควรใช้ foreach นะครับ ใช้ implode() แบบที่เขาเึขียนตัวอย่างไว้มันเร็วกว่ามากครับ

echo ออกไปเลย
1.echo implode("\r\n",$arr);


จริงๆ แล้ว PHP มีฟังก์ชั่นสร้างตัวเลขต่อเนื่องนะครับ ชื่อว่า range()

ตามโจทย์ในตอนแรก สามารถเขียนให้เหลือแค่นี้ได้
1.<?php
2.$v = range(1, 100000);
3.shuffle($v);
4.file_put_contents('data.txt', implode("\n", $v));

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-06-14 14:38:50 By : cookiephp
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : รบกวนด้วยครับ การเขียนโปรแกรมรับค่าตัวเลขและสุ่มบันทึกในไฟล์ .txt
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)





Load balance : Server 05
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2025 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่