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 แล้วก็ไม่ได้ครับ ทำอย่างไรดีครับ
จากความต้องการข้างบนนี้สามารถเขียนได้เป็น
<?
$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 ก่อนก็ได้ครับ
Wed 10 Jan 2007 14:31:09

















