|
|
|
อยากรู้วิธี เรียงลำดับ ตัวอักษรภาษาไทย โดย ไม่ได้ใช้คำสั่งจาก SQL ครับ |
|
|
|
|
|
|
|
ดันๆ
|
|
|
|
|
Date :
2013-03-29 19:12:18 |
By :
copsychus |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ท่าจะยาก
|
|
|
|
|
Date :
2013-03-29 23:18:24 |
By :
copsychus |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อ่านคำถามแล้วงงครับ เหมือนจะอธิบายรู้เรื่อง แต่ก็ไม่รู้เรื่องครับ
ไม่รู้ตรงตามต้องการหรือเปล่า
<?php
$arr = array('อธิบาย', 'ให้เข้าใจ', 'กว่านี้หน่อย', 'จะได้ไหม');
echo '<pre>';
print_r($arr);
sort($arr);
print_r($arr);
|
|
|
|
|
Date :
2013-03-30 03:52:55 |
By :
cookiephp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เอิ่มคือประมาณนี่่ครับ ผมมี 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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แล้ว arrValue นี่มาจากไหนครับ
มีการคำนวณยังไง คิดขึ้นมาเองหรืออย่างไร
จริงๆ การเรียงลำดับคำในแบบพจนานุกรม มันทำได้ในด้วยฟังก์ชั่น sort ทั่วไปอยู่แล้วครับ (แบบตัวอย่างที่ผมตอบ)
ก จะอยู่หน้า ข เสมอเมื่อเรียงด้วยฟังก์ชั่นเหล่านั้นในแบบน้อยไปหามาก
เราไม่ต้องไปกำหนดกฏของเราเองอะไรมากมายเลย (ยกเว้นว่าจำเป็นจริงๆ)
สำหรับภาษาไทยจะมีปัญหาอยู่อย่างเดียวเท่านั้นคือ หากมีสระนำหน้า เช่น พวกสระ "เ" หรือ สระ "โ"
การเรียงลำดับจะผิดไป
เช่น
โกงกิน
บ้านเมือง
กากเดน
เวลาเรียงจากน้อยไปหามากจะได้
กากเดน
บ้านเมือง
โกงกิน
ดูเผินๆ โกงกิน ควรจะอยู่ก่อนบ้านเมือง
แต่เพราะค่าตัวอักษร "โ" มีค่ามากกว่า อักษร "บ" จึงทำให้ โกงกิน อยู่หลังสุด
|
|
|
|
|
Date :
2013-03-30 15:11:24 |
By :
cookiephp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อ่าครับ เข้าใจแล้วครับ มิน่าทำไมมันผิดๆ . . .
ค่า 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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ดันๆ
|
|
|
|
|
Date :
2013-04-02 11:39:55 |
By :
copsychus |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ต้องเปลี่ยนโครงสร้างข้อมูลใหม่ครับ ให้เป็น 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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
ประวัติการแก้ไข 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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถามหน่อยครับ ตัว 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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอให้ไปศึกษาพื้นฐาน PHP เพิ่มเติมนะครับ
|
|
|
|
|
Date :
2013-04-03 02:50:08 |
By :
cookiephp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ประมาณนี้เปล่าครับ
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้าตั้ง สิ่งอำนวยความสะดวก น้อยๆ สัก 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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 04
|