มีคนมาถามความเห็นนี้ใน 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;
?>
$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');
ซึ่งวิธีนี้ สั้นๆ บรรทัดเดียว และทำงานถูกต้อง
อ่านดูแล้วเข้าท่าดี ปัญหาเดียวกัน แต่วิธีการแก้ไขปัญหาไม่เหมือนกัน
ขึ้นอยู่กับว่าใครรู้จักเครื่องมือในการทำงานของตัวเอง มากกว่ากัน
ยิ่งเรารู้จักเครื่องมือในการทำงานของตัวเองมากขึ้นเท่าไหร่ เราจะมีวิธีคิดในการแก้ไขปัญหามากขึ้นเท่านั้น
นี่คือข้อแตกต่างระหว่างคำว่า "ทำได้" กับ "ทำเป็น"
อรุณสวัสดิ์ครับพี่น้องชาวไทย
ไม่มีความคิดเห็น:
แสดงความคิดเห็น