วันพฤหัสบดีที่ 21 สิงหาคม พ.ศ. 2551

PHP ถ้าจะค้นหาข้อความ และทำให้มันเป็นตัวหนา โดยทำให้ Case ของตัวอักษรเหมือนเดิม ทำยังไง?

มีคนมาถามความเห็นนี้ใน pantip developer เห็นแล้วก็น่าคิดเหมือนกัน
ปกติใช้แต่ str_ireplace หรือ str_replace
 
เช่น
 
$a = 'dog';
str_ireplace($a, '<b>' . $a . '</b>', '123dog1234Dog12345DOG')
 
แต่มันตอบโจทย์ไม่ได้ เพราะมันจะได้ผลลัพธ์เป็น
 
        123dog1234dog12345dog
 
ซึ่งผลลัพธ์ที่ต้องการจริงๆ คือแบบนี้
 
        123dog1234Dog12345DOG
 
 
มีคนพยายามแก้ปัญหาด้วยการเขียนโค้ดแบบนี้
 
<?php
$s = '1234dog12345Dog123456DOG';
$sx = strlen($s);
$d = 'dog';
$dx = strlen($d);
while ($p < $sx)
{
$a = stripos($s, $d, $p);
$b .= substr($s, $p, $a - $p);
$b .= '<b>' . substr($s, $a, $dx) . '</b>';
$p = $a + $dx;
}
echo $b;
?>
 
แต่ดูไปมันอาจจะเวิร์ก แต่ก็ยังไม่ใช่คำตอบที่ดี สุดท้ายมีคนชื่อ SvZ มาให้วิธีการดังนี้
 
preg_replace('~(test)~i', '<b>$1</b>', 'ABCTestSWZFDzasTeST');
 
ซึ่งวิธีนี้ สั้นๆ บรรทัดเดียว และทำงานถูกต้อง
อ่านดูแล้วเข้าท่าดี ปัญหาเดียวกัน แต่วิธีการแก้ไขปัญหาไม่เหมือนกัน
ขึ้นอยู่กับว่าใครรู้จักเครื่องมือในการทำงานของตัวเอง มากกว่ากัน
ยิ่งเรารู้จักเครื่องมือในการทำงานของตัวเองมากขึ้นเท่าไหร่ เราจะมีวิธีคิดในการแก้ไขปัญหามากขึ้นเท่านั้น
 
นี่คือข้อแตกต่างระหว่างคำว่า "ทำได้" กับ "ทำเป็น"
 
 
 
 
อรุณสวัสดิ์ครับพี่น้องชาวไทย
 

ไม่มีความคิดเห็น: