|
|
|
อยากทราบตัวอย่างcode PHP ตัดคำนำหน้าชื่อ ชื่อและนามสกุลออกจากกันค่ะ ลองใช้ split,trimแล้วค่ะแต่ก้ยังตัดไม่ได้ตัวอย่างชื่อ ดร. ภรณี สุทธิวานิช ค่ะจะตัดได้อย่างไรคะ |
|
|
|
|
|
|
|
ไม่ค่อยเข้าใจโค้ดค่ะ ช่วยอธิบายหรือมีโค้ดที่เข้าใจง่ายกว่านี้มั้ยคะ
ขอบคุณค่ะCode (PHP)
|
|
|
|
|
Date :
2012-05-01 14:00:55 |
By :
oop |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
// กำหนดคำนำหน้าไว้ก่อน ว่าต้องการตัดสรรพนามอะไรบ้าง
$prefix_utf8["ว่าที่ รต."]=26; // นับอักขระไทยได้ 8 ตัว คูณด้วย 3 = 24 บวกกับช่องว่าง และ จุด(.) อีก 2 รวมเป็น 26
$prefix_utf8["ว่าที่ร้อยตรี"]=39;
$prefix_utf8["นาย"]=9;
$prefix_utf8["นาง"]=9;
$prefix_utf8["นางสาว"]=18;
$prefix_utf8["น.ส."]=8;
$prefix_utf8["ดร."]=7;
$index =1;
// เพิ่มโค้ดในส่วนของการติดต่อ ฐานข้อมูล ที่นี่ครับ
$sql = "select name from sometable ";
$res = mysql_query($sql) or die(mysql_error());
while($fullname_utf8 = mysql_fetch_row($res)){;}
// ส่งเข้าไปเพื่อตัดแยก องค์ประกอบ ออกเป็น คำนำหน้า ชื่อ นามสกุล
foreach($fullname_utf8 as $individual){
foreach($prefix_utf8 as $key => $keylength){
if(strstr($individual , $key)){
$output[$index]["title"] = substr($individual,0,$keylength);
$individual = substr($individual,$keylength);
list($output[$index]["firstName"],$output[$index]["lastName"]) = explode(" ",trim($individual));
}
}
$index++;
}
// ลองพิมพ์ผลลัพธ์ที่ได้ จาก อาร์เรย์ $output
print_r($output);
ทดสอบดูก่อนครับ แล้วค่อยกลับมาถาม
|
|
|
|
|
Date :
2012-05-01 14:15:04 |
By :
sakuraei |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Warning: Invalid argument supplied for foreach() in C:\AppServ\www\compsurvey\untitled.php on line 50
มัน error คะ
<?php
require_once 'inc_db.php';
$sql = "SELECT * FROM test_name";
$result = mysql_query($sql);
if(!$result)
{
die('Error1!' . mysql_error());
}
?>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<?php
$prefix_utf8["ว่าที่ รต."]=26; // นับอักขระไทยได้ 8 ตัว คูณด้วย 3 = 24 บวกกับช่องว่าง และ จุด(.) อีก 2 รวมเป็น 26
$prefix_utf8["ว่าที่ร้อยตรี"]=39;
$prefix_utf8["นาย"]=9;
$prefix_utf8["นาง"]=9;
$prefix_utf8["นางสาว"]=18;
$prefix_utf8["น.ส."]=8;
$prefix_utf8["ดร."]=7;
$index =1;
// เพิ่มโค้ดในส่วนของการติดต่อ ฐานข้อมูล ที่นี่ครับ
while($fullname_utf8 = mysql_fetch_row($result)){;}
// ส่งเข้าไปเพื่อตัดแยก องค์ประกอบ ออกเป็น คำนำหน้า ชื่อ นามสกุล
foreach($fullname_utf8 as $individual){
foreach($prefix_utf8 as $key => $keylength){
if(strstr($individual , $key)){
$output[$index]["title"] = substr($individual,0,$keylength);
$individual = substr($individual,$keylength);
list($output[$index]["firstName"],$output[$index]["lastName"]) = explode(" ",trim($individual));
}
}
$index++;
}
// ลองพิมพ์ผลลัพธ์ที่ได้ จาก อาร์เรย์ $output
print_r($output);
?>
</body>
</html>
|
|
|
|
|
Date :
2012-05-01 14:38:49 |
By :
oop |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
require_once 'inc_db.php';
$sql = "SELECT name FROM test_name";
....
......
while($fullname_utf8[] = mysql_fetch_row($result)){;}
//ขอแก้ไขเพิ่มเติมในส่วนนี้น่ะครับ
// ส่งเข้าไปเพื่อตัดแยก องค์ประกอบ ออกเป็น คำนำหน้า ชื่อ นามสกุล
foreach($fullname_utf8 as $individual){
foreach($prefix_utf8 as $key => $keylength){
if(strstr($individual[0] , $key)){
$output[$index]["title"] = substr($individual[0],0,$keylength);
$individual[0] = substr($individual[0],$keylength);
list($output[$index]["firstName"],$output[$index]["lastName"]) = explode(" ", trim($individual[0] ));
}
}
$index++;
}
|
ประวัติการแก้ไข 2012-05-01 15:03:27
|
|
|
|
Date :
2012-05-01 14:56:48 |
By :
sakuraei |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Array ( [1] => Array ( [title] => นาง [lastName] => รัศมีเทวโชต [firstName] => สาวจารุภา ) [2] => Array ( [title] => นาย [lastName] => มงคลวิทย์ [firstName] => ประพงษ์ ) [3] => Array ( [title] => นาย [lastName] => ไชยูปถัมภ์ [firstName] => บเสริมพงษ์ ) [4] => Array ( [title] => นาย [lastName] => เผนานนท์ [firstName] => เฉลิม ) [5] => Array ( [title] => น.ส. [lastName] => โชติขันธ์ [firstName] => ธิดารัตน์ ) [6] => Array ( [title] => นาง [lastName] => [firstName] => สาวเอริสา ) [7] => Array ( [title] => น.ส. [lastName] => [firstName] => ภรณี ) [8] => Array ( [title] => น.ส. [lastName] => ยังแหยม [firstName] => ยุพิน ) [9] => Array ( [title] => นาง [lastName] => แสงบุญ [firstName] => สาวนฤมล ) [10] => Array ( [title] => ดร. [lastName] => สุทธิวานิช [firstName] => ภรณี ) [11] => Array ( [title] => ว่าที่ร้อยตรี [lastName] => ก่องอนันต์วิทย์ [firstName] => พิศมัย ) [12] => Array ( [title] => นาง [lastName] => สมชื่อ [firstName] => อังคณา ) [13] => Array ( [title] => นาย [lastName] => ศรีสกุลส์ [firstName] => ชาญชัย ) [14] => Array ( [title] => นาย [lastName] => ภาณุรัตน์ [firstName] => บุญยงค์ ) [15] => Array ( [title] => ว่าที่ รต. [lastName] => ม่วงแพรศรี [firstName] => ประพุทธ ) [16] => Array ( [title] => ว่าที่ รต. [lastName] => แสงบุญ [firstName] => นฤมล ) [17] => Array ( [title] => ว่าที่ร้อยตรี [lastName] => เปลื้อง [firstName] => ชัยทัศ ) [18] => Array ( [title] => นาย [lastName] => [firstName] => อัชวรรณ ) )
ผล output บางตัวผิดอะคะ
|
|
|
|
|
Date :
2012-05-01 15:20:15 |
By :
oop |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อาจต้องสลับกันนิดนึงครับ เอา "นางสาว" ขึ้นมาบรรทัดบนก่อน "นาง" ครับ
$prefix_utf8["ว่าที่ รต."]=26;
$prefix_utf8["ว่าที่ร้อยตรี"]=39;
$prefix_utf8["นาย"]=9;
$prefix_utf8["นางสาว"]=18;
$prefix_utf8["นาง"]=9;
$prefix_utf8["น.ส."]=8;
$prefix_utf8["ดร."]=7;
|
ประวัติการแก้ไข 2012-05-01 15:29:19
|
|
|
|
Date :
2012-05-01 15:28:04 |
By :
sakuraei |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้ามีชื่อ "นางสาวิตรี" ไม่รู้ผลจะเป็นยังไง
|
|
|
|
|
Date :
2012-05-01 15:46:37 |
By :
sakuraei |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ว่าที่ร้อยตรีชัยทัศ เปลื้อง ณ ทับเที่ยง นามสกุลแบบนี้คะพอเวลาตัดคำแล้วมันแยกออกเป็น
คำว่าเปลื้อง
ณ
ทับเที่ยง
แบบนี้คะจะแก้ไขยังไงคะ
|
|
|
|
|
Date :
2012-05-01 15:51:04 |
By :
อุ๊ป |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
list($output[$index]["firstName"],$output[$index]["lastName"]) = explode(" ",trim($individual[0]));
เปลี่ยนเป็น
$output[$index] = explode(" ",trim($individual[0]));
$fname = $output[$index][0];
$shift_name = array_shift($output[$index]);
$lname = implode(" ",$output[$index]);
ชื่อจะอยู่ที่ $fname และนามสกุลจะอยู่ที่ $lname ส่วนคำนำหน้าจะยังคงอยู่ที่ $output[$index]["title"]
ลองดูน่ะครับ ประติดประต่อเอาหน่อย ถ้ามีเวลาผมจะมาทำต่อให้
|
ประวัติการแก้ไข 2012-05-01 16:05:34
|
|
|
|
Date :
2012-05-01 16:04:27 |
By :
sakuraei |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>https://www.thaicreate.com/php/forum/077815.html</title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="Unidentifier">
<meta name="Keywords" content="">
<meta name="Description" content="">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<?php
$prefix_utf8["ว่าที่ รต."]=26;
$prefix_utf8["ว่าที่ร้อยตรี"]=39;
$prefix_utf8["นาย"]=9;
$prefix_utf8["น.ส."]=8;
$prefix_utf8["นางสาว"]=18;
$prefix_utf8["นาง"]=9;
$prefix_utf8["ศ.ดร."]=11;
$prefix_utf8["ดร."]=7;
$prefix_utf8["นาวาอากาศตรี"]=36;
/*foreach($prefix_utf8 as $key => $val){
echo "key[$key] key.length = ".strlen($key)."<br />\n";
}*/
include("connect.php");
/*
CREATE TABLE `names` (
`id` int(10) unsigned NOT NULL auto_increment,
`fullname` varchar(150) collate utf8_unicode_ci default NULL,
PRIMARY KEY (`id`),
KEY `fullname` (`fullname`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `names` VALUES (1, 'ว่าที่ รต. ประพุทธ ม่วงแพรศรี'),(2, 'ว่าที่ รต.นฤมล แสงบุญ'),(3, 'ว่าที่ร้อยตรีชัยทัศ ทับเที่ยง'),(4, 'นาย อัชวรรณ อุทัยรังษี'),(5, 'ดร.นารีรัตน์ อิทธิเดช'),(6, 'นาวาอากาศตรีวรสิทธิ์ เดชกุลชร ณ ระนอง'),(7, 'ดร.ชัยวัตร เชียงใหม่ ณ อยุธยา'),(8, 'ศ.ดร.เอกสิทธิ์ เทพหัสดิน ณ อยุธยา')
*/
$sql = "SELECT fullname FROM names";
$result = mysql_query($sql) or die(mysql_error());
$index =1;
while($fullname_utf8[] = mysql_fetch_row($result)){;}
foreach($fullname_utf8 as $individual){
foreach($prefix_utf8 as $key => $keylength){
if(strstr($individual[0] , $key)){
$title[] = substr($individual[0] ,0,$keylength);
$individual[0] = substr($individual[0],$keylength);
$output[$index] = explode(" ",trim($individual[0]));
$fname[] = $output[$index][0];
array_shift($output[$index]);
$lname[] = implode(" ",$output[$index]);
}
}
$index++;
}
for($i=0;$i<count($title); $i++){
echo $title[$i]."||".$fname[$i]."||".$lname[$i]."<br />\n";
}
?>
</body>
</html>
|
|
|
|
|
Date :
2012-05-01 21:23:02 |
By :
sakuraei |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผลลัพธ์
ศ.ดร.||เอกสิทธิ์||เทพหัสดิน ณ อยุธยา
ดร.||ชัยวัตร||เชียงใหม่ ณ อยุธยา
ดร.||นารีรัตน์||อิทธิเดช
ว่าที่ รต.||ประพุทธ||ม่วงแพรศรี
ว่าที่ รต.||นฤมล||แสงบุญ
ว่าที่ร้อยตรี||ชัยทัศ||ทับเที่ยง
นาวาอากาศตรี||วรสิทธิ์||เดชกุลชร ณ ระนอง
นาย||อัชวรรณ||อุทัยรังษี
|
|
|
|
|
Date :
2012-05-01 21:31:04 |
By :
sakuraei |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณค่ะ
|
|
|
|
|
Date :
2012-05-02 09:32:26 |
By :
อุ๊ป |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้าเก็บข้อมูลใน DB แยกฟิลด์ เก็บคำนำหน้าชื่อเลยดีกว่า ง่ายดีครับ
|
|
|
|
|
Date :
2012-05-02 15:11:59 |
By :
keng_ds |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$name = นายสมเดช
echo preg_replace("@(^นาย)|(^นาง)|(^น.ส.)@",'',$name);
ผลลัพย์ สมเดช
|
|
|
|
|
Date :
2024-07-01 20:14:44 |
By :
ชิน |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
$names = [
'จอยบอย',
'ศ.ดร. เอกสิทธิ์ อิทธิเดช',
'ศ.ดร. เอกสิทธิ์ เทพหัสดิน ณ อยุธยา',
'นาวาอากาศตรี วรสิทธิ์ เดชกุลชร ณ ระนอง',
'นาย อัชวรรณ อุทัยรังษี',
'ซาร่า คอนเนอร์',
];
function displayNameParts($name)
{
// normalize spaces.
$name = preg_replace('/(\h{2,})/', ' ', $name);
$nameParts = explode(' ', $name);
if (count($nameParts) <= 1) {
$prefix = '';
$firstName = $nameParts[0];
$lastName = '';
} elseif (count($nameParts) < 3) {
$prefix = '';
$firstName = ($nameParts[0] ?? '');
unset($nameParts[0]);
$lastName = implode(' ', $nameParts);
} else {
$prefix = $nameParts[0];
$firstName = ($nameParts[1] ?? '');
unset($nameParts[0], $nameParts[1]);
$lastName = implode(' ', $nameParts);
}
echo 'prefix: ' . $prefix . '<br>';
echo 'first name: ' . $firstName . '<br>';
echo 'last name: ' . $lastName . '<br>';
}
// loop test names
foreach ($names as $name) {
displayNameParts($name);
echo '<br>';
}
|
|
|
|
|
Date :
2024-07-02 13:28:46 |
By :
mr.v |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 03
|