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 > อยากรู้วิธี เรียงลำดับ ตัวอักษรภาษาไทย โดย ไม่ได้ใช้คำสั่งจาก SQL ครับ



 

อยากรู้วิธี เรียงลำดับ ตัวอักษรภาษาไทย โดย ไม่ได้ใช้คำสั่งจาก SQL ครับ

 



Topic : 093150



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



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




คือผมมีข้อมูลอยุ่ชุดหนึ่ง ในนั้น จะมี ภาษาไทยอยู่หลายๆ ตัวอักษร รวมทั้ง บางตัวมีสระ และ วรรณยุกต์ด้วย

ถ้าเป็นภาษาอังกฤษ ผมสามารถใช้ substring ตัดทีละตัว แล้วสมมุติ อาร์เรย์อีกชุึดนึงเป็นตัวเลข แล้วเทียบค่ากันได้ครับ
แต่ภาษาไทย ผมไม่สามารถทำอย่างนั้นได้ เช่น ก กำ เกา เก้า ไก่ หรือ บ้านมีสุข บ้านสามสกุล แบบนี้ครับ ค่อนข้างปวดหัวน่าดูเลย

มีใครพอมีไอเดีย หรือ วิธีไหมครับ [ไม่ใช้ ตัว SQL นะครับ เป็นข้อมูล ที่เก็บอยู่ใน arrray แต่จะเอามาเรียงน่ะครับ แล้วใส่กลับเข้าไปอีกที]



Tag : PHP







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2013-03-29 12:54:56 By : copsychus View : 7489 Reply : 15
 

 

No. 1



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



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


ดันๆ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-29 19:12:18 By : copsychus
 


 

No. 2



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



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


ท่าจะยาก
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-29 23:18:24 By : copsychus
 

 

No. 3



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

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

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

อ่านคำถามแล้วงงครับ เหมือนจะอธิบายรู้เรื่อง แต่ก็ไม่รู้เรื่องครับ

ไม่รู้ตรงตามต้องการหรือเปล่า
<?php
$arr = array('อธิบาย', 'ให้เข้าใจ', 'กว่านี้หน่อย', 'จะได้ไหม');
echo '<pre>';
print_r($arr);
sort($arr);
print_r($arr);

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-30 03:52:55 By : cookiephp
 


 

No. 4



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



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


เอิ่มคือประมาณนี่่ครับ ผมมี array ภาษาไทยอยู่ แล้วผมต้องการ ทำให้ มันเรียงลำกับ จาก ก ไปถึง ฮ แต่พอดีว่ามันมีวรรณยุกต์ กับสระด้วย ผมเลยไม่รู้จะเรียงยังไงครับ

จะมี array อยู่สองตัว ซึ่งตำแหน่ง index จะเหมือนกัน

เช่น Array[1] = ขำจริง, Array[2] = กำจริง, มี arrValue[1] = 4, arrValue[2] = 4 : ถ้า value ตรงกัน ให้เทียบค่า "ขำจริง" กับ "กำจริง" ถ้าเกิดว่า ตัว Array[2] มีค่าน้อยกว่า ตัวแรก [เทียบ พยัญชนะ สระ] ให้ ทำการ swap value 1>2 และ 2<1 ทั้งตัว Array และตัว arrValue ครับ

พอมี value หลายๆตัวมันก็ จะเรียงเป็นประมาณนี้ครับ

จาก
Array[1] = ขำจริง, arrValue[1] = 4
Array[2] = กำจริง, arrValue[2] = 4
Array[3] = กันจัง, arrValue[3] = 3
Array[4] = งามจัง, arrValue[4] = 4

sort เป็น

Array[1] = กำจริง, arrValue[1] = 4
Array[2] = ขำจริง, arrValue[2] = 4
Array[3] = งามจัง, arrValue[3] = 4
Array[4] = กันจัง, arrValue[4] = 3

ที่ Array[4] ไม่ไปไว้ช่องแรกก็เพราะว่า arrvalue มันมีค่าน้อยกว่า 4 มันก็เลยต้องมาอยู่หลัง value ของ 4 น่ะครับ

พอเข้าใจไหมครับ ละเอียดแล้วนะ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-30 11:10:47 By : copsychus
 


 

No. 5



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

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

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

แล้ว arrValue นี่มาจากไหนครับ
มีการคำนวณยังไง คิดขึ้นมาเองหรืออย่างไร

จริงๆ การเรียงลำดับคำในแบบพจนานุกรม มันทำได้ในด้วยฟังก์ชั่น sort ทั่วไปอยู่แล้วครับ (แบบตัวอย่างที่ผมตอบ)

ก จะอยู่หน้า ข เสมอเมื่อเรียงด้วยฟังก์ชั่นเหล่านั้นในแบบน้อยไปหามาก
เราไม่ต้องไปกำหนดกฏของเราเองอะไรมากมายเลย (ยกเว้นว่าจำเป็นจริงๆ)

สำหรับภาษาไทยจะมีปัญหาอยู่อย่างเดียวเท่านั้นคือ หากมีสระนำหน้า เช่น พวกสระ "เ" หรือ สระ "โ"
การเรียงลำดับจะผิดไป

เช่น

โกงกิน
บ้านเมือง
กากเดน


เวลาเรียงจากน้อยไปหามากจะได้

กากเดน
บ้านเมือง
โกงกิน


ดูเผินๆ โกงกิน ควรจะอยู่ก่อนบ้านเมือง
แต่เพราะค่าตัวอักษร "โ" มีค่ามากกว่า อักษร "บ" จึงทำให้ โกงกิน อยู่หลังสุด
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-30 15:11:24 By : cookiephp
 


 

No. 6



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



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


อ่าครับ เข้าใจแล้วครับ มิน่าทำไมมันผิดๆ . . .

ค่า arrValue เป็นค่าที่ผมตั้งขึ้นมา เพื่อนำมาใช้กับ project ผม . .. โปรเจคของผมมันเป็นเว็บเกี่ยวกับหอพัก arrValue คือ จำนวน สิ่งอำนวยความสะดวก ที่หอพักนั้นๆ มีอยู่ครับ ถ้าสิ่งอำนวยความสะดวกเหมือนกัน ก็จะนำค่าของ Array หรือชื่อของหอพักนั้นๆ มาเทียบค่า กันว่า ตัวอักษร สระ วรรณยุกต์ใดๆ มาก่อน แต่ถ้า ค่า arrValue นั้น ต่ำกว่า ก็จะไม่ต้องทำอะไรครับ

เพราะ array ที่มีอยู่ตอนนี้ มันเรียง ค่า arrValue [0] ถึง x มันเรียงจาก ค่าสูงไปต่ำอยู่แล้ว ที่ต้องใช้คือแค่ ค่า arrValue มาเทียบกันก่อน จากนั้นก็นำ ค่า Array หรือ ชื่อหอพัก มาเทียบว่า ตัวอักษร สระ วรรณยุกต์ อันไหนน้อยกว่าก็ สลับที่ ถ้า มากกว่าก็ไม่ต้องทำอะไร สลับที่ทั้ง Array และ arrValue ครับ

ถ้าใช้ sort มันก็จะ sort ทุกอันโดยไม่สนใจ value เลยอะครับ ก็เลยอยากได้ แนวทาง หรือ โลจิกมากกว่า function ลัดอะครับ


ประวัติการแก้ไข
2013-03-31 21:00:11
2013-03-31 21:02:51
2013-03-31 21:09:39
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-31 20:58:50 By : copsychus
 


 

No. 7



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



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


ดันๆ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-04-02 11:39:55 By : copsychus
 


 

No. 8



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

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

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

ต้องเปลี่ยนโครงสร้างข้อมูลใหม่ครับ ให้เป็น array หลายมิติ
คือเก็บทั้งชื่อ และค่าที่ต้องการเปรียบเทียบ
แล้วเวลา sort ก็เปลี่ยนไปใช้ฟังก์ชั่น sort ที่รับ callback เช่น usort() เพื่อเปรียบเทียบค่าเหล่านั้น

<?php
function concat_and_compare($a, $b)
{
	$x = str_pad($a['value'], 4, '0', STR_PAD_LEFT) . $a['name'];
	$y = str_pad($b['value'], 4, '0', STR_PAD_LEFT) . $b['name'];
	return $x < $y ? -1 : 1;
}
$arr = array(
	array('name' => 'ไก่',  'value' => 4),
	array('name' => 'หมู',  'value' => 3),
	array('name' => 'ปลา', 'value' => 4),
	array('name' => 'หมา', 'value' => 3),
	array('name' => 'แมว', 'value' => 3),
	array('name' => 'หมี',  'value' => 4),
	array('name' => 'กา',  'value' => 4),
);
usort($arr, 'concat_and_compare');
echo '<pre>';
print_r($arr);

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-04-02 12:19:30 By : cookiephp
 


 

No. 9



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



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

Code (PHP)
//จัดรูปแบบข้อมูลแต่ละแถวให้ จำนวนสิ่งอำนวยความสะดวกมาก่อน
$apartment = array(
				array( 'accessory' => 3, 'name' => 'ราเม็ง' ),
				array( 'accessory' => 4, 'name' => 'ขำจริง' ),
				array( 'accessory' => 4, 'name' => 'กำจริง' ),
				array( 'accessory' => 3, 'name' => 'กันจัง' ),
				array( 'accessory' => 4, 'name' => 'งามจัง' ),
				array( 'accessory' => 3, 'name' => 'โกเฮง' ),
			);
//จัดกลุ่มหอพักตาม จำนวนสิ่งอำนวยความสะดวก
$newArr = array();
foreach($apartment as $arr){
	$newArr[$arr['accessory']][] = $arr['name'];
}
echo '<hr/>';
echo '<pre>', print_r($newArr, true) , '</pre>';
echo '<hr/>';
//จัดเรียงด้วย key ซึ่งเป็นจำนวนสิ่งอำนวยความสะดวก (จากมาก - น้อย)
krsort($newArr);
echo '<pre>', print_r($newArr, true) , '</pre>';
echo '<hr/>';
echo '<h2>รายชื่อหอพักเรียงตาม สิ่งอำนวยความสะดวก และอักษร</h2>';	

echo '<table border=1>';
echo '<tr><th>ชื่อหอพัก</th><th>สิ่งอำนวยความสะดวก</th></tr>';
foreach($newArr as $acc=>$arr){
	//เรียงตัวอักษร จาก ก-ฮ
	natcasesort($arr);
	foreach($arr as $name){
		echo "<tr><td>". $name ."</td><td align='center'>". $acc ."</td></tr>";
	}
}
echo '</table>';


1. จัดรูปแบบข้อมูลแต่ละแถวให้ จำนวนสิ่งอำนวยความสะดวกมาก่อน
2. จัดกลุ่มหอพักตาม จำนวนสิ่งอำนวยความสะดวก
3. จัดเรียงด้วย key ซึ่งเป็นจำนวนสิ่งอำนวยความสะดวก (จากมาก - น้อย)
4. ในลูปจะเป็นชื่อหอพักต่างๆ ให้เรียงตัวอักษร จาก ก-ฮ


แต่การเรียงภาษาไทย ยังมีเรื่องสระที่เป็นปัญหาอยู่

กันจัง 3
ราเม็ง 3
โกเฮง 3

php-array-sort2


ประวัติการแก้ไข
2013-04-02 16:28:03
2013-04-02 16:31:17
2013-04-02 16:34:52
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-04-02 16:19:54 By : Naizan
 


 

No. 10



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



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


ถามหน่อยครับ ตัว array ตัวนี้

Code (PHP)
$arr = array(
array('name' => 'ไก่',  'value' => 4),
array('name' => 'หมู',  'value' => 3),
array('name' => 'ปลา', 'value' => 4),
array('name' => 'หมา', 'value' => 3),
array('name' => 'แมว', 'value' => 3),
array('name' => 'หมี',  'value' => 4),
array('name' => 'กา',  'value' => 4),
);


ถ้าผมมี arrValue 5 ตัว กับ array ชื่ออยู่แล้ว 5 ตัว ผมจะเอามาใส่ในนี้ได้ยังไงครับ . . .
[อยากได้แบบ ไม่้ fixed นะครับ เพราะผมลองเอา for int i =0 ใส่ไว้ใน array แล้วมันขึ้นerror อะครับ


ประวัติการแก้ไข
2013-04-03 02:04:15
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-04-03 02:03:22 By : copsychus
 


 

No. 11



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

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

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

ขอให้ไปศึกษาพื้นฐาน PHP เพิ่มเติมนะครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-04-03 02:50:08 By : cookiephp
 


 

No. 12



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



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


ประมาณนี้เปล่าครับ
Code (PHP)
	for($k=0;$k<$faccount;$k++){
			$array[$k] = array();
			$array[$k]['name'] = "Ying Tavon Apartment";
			$array[$k]['facility'] = 4;
			$array[$k]['id'] = "a46852481796514";
			}


ลอง sort ดุแล้ว ทั้งอังกฤษ และ ไทย มันจะออกเพี้ยนๆ บางตำแหน่ง . . .

อังกฤษ เลยใช้ logic ของตัวเองที่สร้างขึ้นมา ส่วน ไทยก็ตามนี้ครับ


ประวัติการแก้ไข
2013-04-03 08:11:04
2013-04-03 08:14:29
2013-04-03 08:15:29
2013-04-03 08:15:58
2013-04-03 14:45:12
2013-04-03 14:45:46
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-04-03 08:07:24 By : copsychus
 


 

No. 13



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



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


ถ้าตั้ง สิ่งอำนวยความสะดวก น้อยๆ สัก 1 หรือ 2 มันชอบขึ้นว่า


Warning: usort() [function.usort]: The argument should be an array in C:\AppServ\www\phpmyproject\php\SearchresultTH.php on line 543

มันคืออะไรแล้วมีวิธีแก้ไหมครับ, ผมใช้โค้ดตามคุณ แมวของคุกกี้ ใน comment 8 น่ะครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-04-04 21:21:42 By : copsychus
 


 

No. 14



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

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

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

function sortthaitis620(&$a){
    setlocale(LC_COLLATE, 'thai');
    usort ($a, 'strcoll');
}
function sortthai(&$a){//สำหรับ utf8
    foreach($a as &$i){
      $i = iconv('UTF-8','TIS-620',$i);
    }
    setlocale(LC_COLLATE, 'thai');
    usort ($a, 'strcoll');
    foreach($a as &$i){
      $i = iconv('TIS-620','UTF-8',$i);
    }
}
$a = array('โค','เคย','ไก่','การบ้าน','ข้าว','ไข่');
sortthai($a);
echo implode(',',$a);


ใน php จะต้องเซ็ต locale = thai และใช้ usort ช่วยตามนี้ครับ

อ่านเพิ่มเติม
http://web-programming-bookmark.blogspot.com/2013/10/php-sorting-thai-characters.html
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-10-26 14:39:33 By : num
 


 

No. 15



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



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


PHP Collator

Code (PHP)
$array = [
    'ไก่',
    'กา',
    'แขน',
    'ขา',
];
$coll = new \Collator('th-TH.utf-8');// ใช้อะไรก็ได้ให้เป็นภาษาไทย เช่น th_TH, th-TH, th
$coll->asort($array, \Collator::SORT_STRING);
echo '\Collator::asort(): <pre>'.print_r($array, true).'</pre>'.PHP_EOL;


ได้
Quote:
\Collator::asort():

Array
(
[1] => กา
[0] => ไก่
[3] => ขา
[2] => แขน
)

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-01-13 13:55:26 By : mr.v
 

   

ค้นหาข้อมูล


   
 

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