พบกับบทความเกี่ยวกับคอมพิวเตอร์และ programming ได้ที่ http://articles.modoeye.com | บล็อกอาหาร
PHP development / เรื่องการตัดคำที่ไม่ธรรมดา
indyRoot
indyRoot
Tue 9 Jan 2007 15:07:23

คือผมอยากจะแบ่งคำน่ะคับ คือว่าแบบนี้ครับ ผมต้องการที่จะแยกชื่อกับนามสกุลออกจากกันครับ สมุติครับ
<?php
$myname = "อสูรกาย ใจดีจัง"; // ตัวอย่างชื่อ
list($name, $surname) = split(' ', $myname);
echo "Name: ".$name;
echo "Surname: ".$surname;
?>
อันนี้ได้ครับแต่ในกรณีที่ว่า $myname = "อสูรกาย ใจดีจัง"; // ตัวอย่างชื่อ
หากข้อมูลผมบ้างอัน ช่องว่างระหว่างชื่อและนามสกุล มันมีมากกว่า 1 วรรค (คือข้อมูลผมมีเยอะครับแล้วบางคนก็ดันไปเคาะหลายวรรคครับ) ยกตัวอย่างเช่น
<?php
$myname = "อสูรกาย    ใจดีจัง"; // ตัวอย่างชื่อที่มีการเคาะวรรค 4 ครั้ง {อสูรกาย____ใจดีจัง}
list($name, $surname) = split(' ', $myname);
echo "Name: ".$name;
echo "Surname: ".$surname;
?>
หากรันแล้วมันไม่แสดงนามสกุลครับเพราะเนื่องจากมีการเคาะวรรคมากกว่า 1 ครั้งครับ -_-" ทำอย่างไรดีครับ

แล้วคำถามที่ 2 น่ะคับ

หากแยกนามสกุลมาได้แล้วผมต้องการให้เอาเฉพาะ ตัวอักษรตัวแรกมาแสดงอ่ะคับ คือว่าแบบนี้ครับ
สมมุติว่าผมแยกออกมาได้เป็น
<?php
$surname = "ใจดีจัง"; // สมมุติว่า แยกนามสกุลออกมาแล้ว
?>
ผมอยากให้มันแสดงออกมาเป็น จ
ครับคือแสดงออกมาเป็นตัวอักษร (จ)จอจาน ตัวเดียว คือไม่แสดงอักขระที่เป็นสระวรรณ์ยุกต์(เ,แ,ใ,ไ,โ) น่ะครับ

เช่น หากคนนามสกุล "เก่งกาจมาก" ก็จะแสดงเป็น ก
เช่น หากคนนามสกุล "ใหญ่จิง" ก็จะแสดงเป็น ห
เช่น หากคนนามสกุล "มันส์มาก" ก็จะแสดงเป็น ม
เช่น หากคนนามสกุล "จัยเล็ก" ก็จะแสดงเป็น จ

ผม trim แล้วก็ไม่ได้ครับ ทำอย่างไรดีครับ

Administrator
Tue 9 Jan 2007 20:16:34
วิธีที่ง่ายและเร็วที่สุดในการประมวลผลต้องใช้พลังของ Regular Expressions ครับ
จากความต้องการข้างบนนี้สามารถเขียนได้เป็น
<?
$name = "อสูรกาย     ใจดีจัง";
preg_match("/([xA1-xFB]+)s+([xA1-xFB]+)/", $name, $matches);
print_r($matches);
?>
จะได้เป็นตัวแปร array ชื่อ $matches

จากนั้นถ้าต้องการเอาเฉพาะตัวอักษรเท่านั้นก็จะได้
<?
$name = "อสูรกาย     ใจดีจัง";
preg_match("/([xA1-xFB]+)s+([xA1-xFB]+)/", $name, $matches);
print_r($matches);
preg_match("/([xA1-xCE])/", $matches[2], $matches);
print_r($matches);
?>

โดยโค๊ดนี้อ้างตามภาษาไทยในระบบ ASCII โดยใช้ตารางรหัส TIS620 ครับดูตารางได้ที่
http://en.wikipedia.org/wiki/TIS-620
ส่วนถ้าต้องการเขียนในแบบ Unicode ต้องเปลี่ยนไปใช้รหัสในรหัส Unicode ครับ หรืออาจจะใช้ iconv() เพื่อแปลงเป็น TIS620 ก่อนก็ได้ครับ
IndyRoot
IndyRoot
Wed 10 Jan 2007 14:31:09
ขอบคุงคับ
Reply
Name:
E-mail:
Home | Services | Forum | Classified | Directories | Support | Contact
ATOM feed RSS 0.9 feed RSS 1.0 feed RSS 2.0 feed
Copyright © 2005 - 2007 Modoeye.com, All Rights Reserved.
Disclaimer | Privacy policy | Term of Use | Term of Services
Valid XHTML Valid CSS! PHP: Hypertext Preprocessor MySQL database Apache Powered! FreeBSD Power to serve
Modoeye Sitemap Client login