• April 27, 2018
    <?php 
    $rest = substr("abcdef", 1);    // returns "bcdef" 
    $rest = substr("abcdef", 1, 3); // returns "bcd" 
    $rest = substr("abcdef", 0, 4); // returns "abcd" 
    $rest = substr("abcdef", 0, 8); // returns "abcdef" 
    ?>
    
    <?php 
    $rest = substr("abcdef", -1);    // returns "f" เริ่มนับจากตัว f
    $rest = substr("abcdef", -2);    // returns "ef" เริ่มนับจากตัว e
    $rest = substr("abcdef", -3, 1); // returns "d" เริ่มนับจากตัว d
    ?>
    
    <?php 
    $rest = substr("abcdef", 8,4);   
     // returns FALSE ข้อความยาวแค่ 6 ตัวอักษร
    // แต่ค่า start เป็น 8 มากกว่าความยาวของค่าความจึงส่งค่ากลับมาเป็น FALSE
    ?>

    กรณีค่า length มีค่าเป็นบวก หมายถึงจำนวนข้อความที่ต้องการตัดเท่ากับค่า length นั้นๆ

    กรณีค่า length มีค่าเป็นลบ หมายถึงการระบุตำแหน่งสุดท้ายของข้อความที่ต้องการ โดยตัดข้อความที่นับจากด้านหลังออก เช่น -1 หมายถึงนับจากตัวสุดท้ายมา 1 ตัวให้ตัดออกไป

    ตัวอย่างกรณีค่า length มีค่าเป็นลบ

    <?php 
    $rest = substr("abcdef", 0, -1);  // returns "abcde" 
    // ตัดข้อความจากตัวแรก a ไปจนถึง ตัว e โดยตัดข้อความที่นับจากหลังมา 1 ตัวออกไป
    $rest = substr("abcdef", 2, -1);  // returns "cde" 
    $rest = substr("abcdef", 4, -4);  // returns "" 
    $rest = substr("abcdef", -3, -1); // returns "de" 
    ?>
    กรณีตัดข้อความที่เป็นภาษาไทยแล้วแสดงเป็นสัญลักษณ์แปลกๆ ให้ใช้คำสั่ง mb_substr() แทน
    โดยรูปแบบการใช้งานก็จะคล้ายๆ กับ substr()
    ตัวอย่าง
    <?php
    $text = "วันนี้ทดสอบบบ";
    echo mb_substr($text,0,-2);
    // จะได้ผลลัพธ์เป็น "วันนี้ทดสอบ"
    ?>
    เราสามารถใช้คำสั่ง str_split() เพื่อแยกตัวอักษรแต่ละตัวในข้อความได้ โดยจะคืนค่าเป็น array
    เช่น
    $text = "This is a test";
    $arr_char = str_split($text);
    print_r($arr_char);

    ผลลัพธ์ที่ได้

    Array
    (
        [0] => T
        [1] => h
        [2] => i
        [3] => s
        [4] =>  
        [5] => i
        [6] => s
        [7] =>  
        [8] => a
        [9] =>  
        [10] => t
        [11] => e
        [12] => s
        [13] => t
    )

    สามารถกำหนด การแยกทีละ กี่ตัวอักษรก็ได้ เช่นแยกทีละ 3 ตัว

    $text = "This is a test";
    $arr_char = str_split($text,3);
    print_r($arr_char);

    ผลลัพธ์ที่ได้

    Array
    (
        [0] => Thi
        [1] => s i
        [2] => s a
        [3] =>  te
        [4] => st
    )
    สังเกตว่า จะรวมช่องว่างนับเข้าไปด้วย
    วิธีการแยกตัวอักษรจากวิธีข้างต้น โดยใช้คำสั่ง str_split() ไม่สามารถใช้งานได้ กับการแยก
    ตัวอักษรภาษาไทย แต่เราสามารถใช้ คำสั่ง preg_match_all() สำหรับกรณีภาษาไทย ได้ดังนี้
    $text = "ภาษาไทย";
    preg_match_all('/./u',$text,$arr_char);
    print_r($arr_char);

    ผลลัพธ์ที่ได้

    Array
    (
        [0] => Array
            (
                [0] => ภ
                [1] => า
                [2] => ษ
                [3] => า
                [4] => ไ
                [5] => ท
                [6] => ย
            )
    
    )
    คำสั่ง preg_match_all() ข้างต้นคือ ค้นหาจากการเปรียบเทียบ regular expression โดยใช้
    /./u เทียบกับข้อความในตัวแปร $text ซึ่ง . คือ ตัวอักษรใดๆ ส่วน u คือการระบุให้อยู่ในรูปแบบ
    UTF-8 ซึ่งสำคัญสำหรับกรณีภาษาไทย
    โดยเมื่อได้ตัวอักษรแต่ละตัวก็เอาไปเก็บในตัวแปร array ที่ชื่อ $arr_char

    การตัดตัวอักษรซ้ำ ตัวอักขระซ้ำ อักษรที่เกินให้เหลือตัวเดียว

    แนวทางคำสั่งต่อไปนี้ ใช้สำหรับการแทนที่ตัวอักษรหรือตัวอักขระ ที่พิมพ์ติดๆ กันซ้ำ ซึ่งง
    อาจจะเกิดจากการพิมพ์ผิดพลาดหรือเหตุผลใด ตัวอย่างเช่น
    เราจะเห็นว่าคำว่า “สอบ” มีตัว “บ” ซ้ำมาถึง 4 ตัว เราต้องการจะให้แสดงแค่ตัวเดียวจะทำอย่างไร
    นอกจากนี้ แนวทางที่จะแนะนำยังประยุกต์ได้ดังนี้
    • ถ้ามีตัวซ้ำมากกว่า 1 ตัวขึ้นไป
    • ถ้ามีตัวซ้ำมากกว่า n ตัวขึ้นไป
    การประยุกต์แรก ตัวซ้ำมากกว่า 1 ตัวขึ้นไป

    <?php
    $text = "วันนี้ทดสอบบบ";
    $text = preg_replace('/(.)\1+/u','$1',$text);
    echo $text;
    // จะได้เป็น "วันี้ทดสอบ"
    จะเห็นว่ากรณีแรกจะใช้ได้ผลเฉพาะบางคำ และปกติไม่ค่อยใช้เท่าไหร่ เพราะโอกาส ที่ตัวอักษรจะติด
    กันอย่างน้อยสองตัว เป็นไปได้เสมอในหลายๆ คำ ดังนั้นตัวอย่างข้างต้น คำว่า “ทอสอบ” จะแสดงได้
    ถูกต้อง แต่คำว่า “วันนี้” กลับตัดเหลือแค่ “วันี้” ซึ่งยังไม่ถูกต้อง  เราจึงใช้วิธีที่สอง
    เงื่อนไขคือซ้ำกันสองตัวไม่ต้องตัด ซ้ำกันเกินสองตัวให้ตัดเหลือตัวเดียว จะได้เป็น

    <?php
    $text = "วันนี้ทดสอบบบ";
    $text = preg_replace('/(.)\1{2,}/u','$1',$text);echo $text;
    echo $text;
    // จะได้เป็น "วันนี้ทดสอบ"
    จะเห็นว่าคำว่า “วันนี้” มี “น” ติดกันแค่สองตัว จึงไม่ตัดเหลือตัวเดียว
    ในขณะที่คำว่า “ทดสอบบบ” มี “บ” ติดกันเกินสองตัว จัดตัดเหลือตัวเดียว
    หากเราต้องการประยุกต์โดยเพิ่มเงื่อนไขเช่นว่า มากกว่า 3, 4 หรือ n ตัว แล้วให้ตัดเหลือตัวเดียว
    ก็ให้เปลี่ยนตัวเลขเป็นตามจำนวนที่ต้องการเช่น สมมติ มากกว่า 3 ตัวหรือเท่ากับ 4 ตัวขึ้นไปก็
    จะใช้เป็น

    <?php
    $text = "ววววันนี้ทดสอบบบบ";
    $text = preg_replace('/(.)\1{3,}/u','$1',$text);echo $text;
    echo $text;


เวอไนน์ไอคอร์ส

ประหยัดเวลากว่า 100 เท่า!






เวอไนน์เว็บไซต์⚡️
สร้างเว็บไซต์ ดูแลเว็บไซต์

Categories


Uncategorized