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,037

HOME > PHP > PHP Forum > ขอคำแนะนำเกี่ยวกับการเขียนสลับตัวเลขโดยที่ไม่ซ้ำกันคับ



 

ขอคำแนะนำเกี่ยวกับการเขียนสลับตัวเลขโดยที่ไม่ซ้ำกันคับ

 



Topic : 078339



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



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




สลับตัวเลข โดยที่ตัวเลขจะได้รับมาจาก input1 คับ
เช่น กรอกค่า 123 ผลลัพธ์ที่ได้คือ 123,132,213,231,312,321



Tag : PHP







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2012-05-13 19:27:28 By : nomonboy View : 7596 Reply : 14
 

 

No. 1



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



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

ยังนึกไม่ออกเลยว่าจะใช้คำสั่งอะไรดี ??? รอท่านผู้รู้มาตอบ.... อยากรู้เหมือนกันครับ (เหมือนหวยเลย อิอิอิ)






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-05-14 03:09:27 By : superdong
 


 

No. 2



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

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

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

เคยเจอในกระทู้เก่า ๆ และมีคนเคยตอบไว้ด้วยครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-05-14 06:17:15 By : mr.win
 

 

No. 3



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

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

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


ก่อนอื่นต้องบอกว่าจำนวนของตัวเลขที่สลับแล้วไม่ซ้ำกันจะเท่ากับ n!
ผมใช้วิธีเขย่าอาร์เรย์ "shuffle" เพื่อให้มันสลับที่กัน ก็วนอยู่ในลูปไปเรื่อยๆ จนกว่าจะได้สมาชิกที่ไม่ซ้ำกัน
ภายใตเงื่อนไขว่าจำนวนสมาชิกจะไม่เกินกว่า n!

Code (PHP)
function factorial($n){
	if($n==1) return $n;
	else return $n*factorial($n-1);
}

$a =1234;
$_a = str_split($a);
$num= count($_a);
$ele_amnt = factorial($num);
$output = array();

	while(count($output) < $ele_amnt){
	shuffle($_a);
	$justnumber = implode("",$_a);	
	if(!in_array( $justnumber , $output))
		$output[] = $justnumber;

}
sort($output);
print_r($output);

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-05-14 10:34:47 By : sakuraei
 


 

No. 4



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



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


ขอบคุณคับ คุณ Unidentifer
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-05-14 23:50:13 By : nomonboy
 


 

No. 5



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



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


มันใช้กับ input ที่เป็น เลขซ้ำเช่น 554 555 ไม่ได้ครับ
แก้ไงดี
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-06-05 00:38:33 By : feedblackho
 


 

No. 6



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

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

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

ลอง PM ไปถามคุณ Unidentifer ดูครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-06-05 06:24:48 By : mr.win
 


 

No. 7



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

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

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


ตอบความคิดเห็นที่ : 5 เขียนโดย : feedblackho เมื่อวันที่ 2012-06-05 00:38:33
รายละเอียดของการตอบ ::
เขียนได้หลายวิธีครับ คืนนี้ว่างๆ จะมาตอบให้น่ะครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-06-05 17:22:17 By : sakuraei
 


 

No. 8



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



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


ผมใช้วิธีนี้ครับ แต่โค้ดไม่สวย ลองดูนะครับ
Code (PHP)
<?php
$number = 123;
$a = substr("$number", -3, 1)."<br>";   
$b = substr("$number", -2, 1)."<br>";   
$c = substr("$number", -1)."<br>"; 
	
	if(($a == $b)||($a == $c)||($b == $c)){
		if($a == $b){
			$n1 = $a.$a.$c;
			$n2 = $a.$c.$a;
			$n3 = $c.$a.$a;
		}elseif($a == $c){
			$n1 = $a.$b.$a;
			$n2 = $a.$a.$b;
			$n3 = $b.$a.$a;
		}else{
			$n1 = $a.$b.$b;
			$n2 = $b.$b.$a;
			$n3 = $b.$a.$b;
		}
	}else{
	 $n1 = $a.$b.$c;
	 $n2 = $a.$c.$b;
	 $n3 = $b.$a.$c; 
	 $n4 = $b.$c.$a; 
	 $n5 = $c.$a.$b; 
	 $n6 = $c.$b.$a; 
	}
?>



ประวัติการแก้ไข
2012-08-04 14:19:22
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-08-04 14:17:33 By : cs013
 


 

No. 9



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

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

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

แจ่มครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-08-05 20:14:03 By : mr.win
 


 

No. 10



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



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

พอดีหา Code สลับเลขแบบที่คุณ Unidentifier ตอบไว้ครับ ผมเลยไปอ่านเรื่อง Factorial เพิ่มทำให้แก้ปัญหาตรง shuffle ได้ ตาม code ด้านล่างเลยครับ ต้องขอบคุณ คุณ Unidentifier ด้วยครับ ไม่งั้นผมไปต่อไม่เป็นจริงๆ

Code (PHP)
<?php
<?php
function permutation($_a, $buffer='', $delimiter='') {
    $output = array();

    $num = count($_a);
    if ($num > 1) {
        foreach ($_a as $key=>$val) {
            $temp = $_a;
            unset($temp[$key]);
            sort($temp);

            $return = permutation($temp, trim($buffer.$delimiter.$val, $delimiter), $delimiter);

            if(is_array($return)) {
                $output = array_merge($output, $return);
                $output = array_unique($output);
            }
            else {
                $output[] = $return;
            }

        }
        return $output;
    }
    else {
        return $buffer.$delimiter.$_a[0];
    }
}

$a = 12345;
$_a = str_split($a);
$output = permutation($_a);

print_r($output);





ประวัติการแก้ไข
2016-08-08 01:04:18
2016-08-08 01:07:42
2016-08-08 09:31:41
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-08-07 23:55:15 By : kerb
 


 

No. 11



โพสกระทู้ ( 9,587 )
บทความ ( 2 )



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


รองแบบนี้ดูไหมครับ
Code (PHP)
<?php
function digit($c){
	$rs=array(); $idx=pow($c,$c);
	for($i=0; $i < $idx; $i++){
		$t=''; $n=$i;
		do{ $x = $n % $c; $n = floor($n / $c); $t = $x.$t;}while($n);
		$u=array_unique(str_split($t=str_pad($t, $c, '0', STR_PAD_LEFT)));
		if(count($u)==$c) $rs[]=$t;
	}
	return $rs;
}
$error = ''; $rs_num = array();
if(isset($_POST['key'])){
	$c = count($_POST['key']);
	if(count(array_unique($_POST['key'])) != $c){
		$error = 'Duplicate key';
	}else{
		$rs=digit($c);
		foreach($rs as $k=>$v){
			$z=str_split($v); $rs_num[$k]='';
			foreach($z as $n) $rs_num[$k] = $_POST['key'][$n] . $rs_num[$k]; 
		}
		sort($rs_num);
	}
}
?>
<!doctype html>
<html>
<body>
<?=(count($rs_num)? 'result: <pre>'.implode('<br>',$rs_num).'</pre>' : '')?>
<?=($error? "Error: ".$error : '')?>
<form method="post" >
Key 1 <input type=text name="key[]" value="<?=(isset($_POST['key'][0])? $_POST['key'][0] : '')?>"><br>
Key 2 <input type=text name="key[]" value="<?=(isset($_POST['key'][1])? $_POST['key'][1] : '')?>"><br>
Key 3 <input type=text name="key[]" value="<?=(isset($_POST['key'][2])? $_POST['key'][2] : '')?>"><br>
Key 4 <input type=text name="key[]" value="<?=(isset($_POST['key'][3])? $_POST['key'][3] : '')?>"><br>
<button>Excute</button>
</form>
</body>
</html>



ประวัติการแก้ไข
2016-08-08 09:42:50
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-08-08 09:38:42 By : Chaidhanan
 


 

No. 12



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



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

ตอบความคิดเห็นที่ : 11 เขียนโดย : Chaidhanan เมื่อวันที่ 2016-08-08 09:38:42
รายละเอียดของการตอบ ::
ใช้ได้ครับ ขอบคุณมากครับ แต่ของพี่ Chaidhanan ผมชอบวิธีคิดนะครับ ง่ายดี เอา array key มาสลับก่อน แล้วค่อยแทนค่าด้วย value วิธีที่ผมใช้จะยึดเลขจากหน้าไปหลัง ไล่สลับจากด้านหลังทีละตำแหน่งจนครบ แล้วค่อยเปลี่ยนเลขครับ



ประวัติการแก้ไข
2016-08-08 17:28:09
2016-08-08 17:32:45
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-08-08 17:24:05 By : kerb
 


 

No. 13

Guest


ตอบความคิดเห็นที่ : 11 เขียนโดย : Chaidhanan เมื่อวันที่ 2016-08-08 09:38:42
รายละเอียดของการตอบ ::
สวัดดีครับ

สมมุติ สวัดดี ไปไหน กำลัง

ต้องการให้

= สวัดดี กับ ไปไหน

สลับที่กันอะครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-10-18 11:09:46 By : mini
 


 

No. 14



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



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

ตอบความคิดเห็นที่ : 13 เขียนโดย : mini เมื่อวันที่ 2020-10-18 11:09:46
รายละเอียดของการตอบ ::
Code (PHP)
$x = "สวัดดี ไปไหน กำลัง";
$a = explode(" ", $x);

echo "ก่อนสลับ:<br>";
print_r($a);
echo "<br><br>หลังสลับ:<br>";

//=========
// สลับตำแหน่ง
//=========

/*

[$a[0], $a[1]] = [$a[1], $a[0]]; // PHP7.1+

list($a[0], $a[1]) = [$a[1], $a[0]]; // PHP5.4+

list($a[0], $a[1]) = array($a[1], $a[0]); // PHP4+

*/

$tmp = $a[0];
$a[0] = $a[1];
$a[1] = $tmp;

print_r($a);




ประวัติการแก้ไข
2020-10-21 14:25:59
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-10-21 14:25:37 By : PhrayaDev
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ขอคำแนะนำเกี่ยวกับการเขียนสลับตัวเลขโดยที่ไม่ซ้ำกันคับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ 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 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

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