Làm sao để str_replace chỉ thay thế lần đầu tiên ?

0 k thích

Mình muốn làm sao để hàm str_replace chỉ thay thế cụm từ tìm kiếm $searchmột lần trong trường hợp có nhiều lần xuất hiện. Có cách nào nhanh không ?

avatar đã hỏi ngày 9 tháng 7 bởi stevenqb1890 (1,270 điểm)  

2 Trả lời

0 k thích
 
Hay nhất

Hoặc có thể dùng :

$pos = strpos($haystack, $needle);
if ($pos !== false) {
    $newstring = substr_replace($haystack, $replace, $pos, strlen($needle));
}

Cách này sẽ tốt hơn về performance so với dùng regular expression.
Nếu muốn thay thế cùm cuối cùng thì dùng hàm strrpos thay vì strpos như ở trên

avatar trả lời ngày 9 tháng 7 bởi admin (2,590 điểm)  
đã được chọn ngày 15 tháng 7 bởi admin
+1 thích

bạn có thể dùng preg_replace

function str_replace_first($from, $to, $subject)
{
    $from = '/'.preg_quote($from, '/').'/';

    return preg_replace($from, $to, $subject, 1);
}

echo str_replace_first('abc', '123', 'abcdef abcdef abcdef'); 
// outputs '123def abcdef abcdef'

Để ý tham số thứ 4 của hàm preg_replace nó có nghĩa là số lần match tối đa. Mặc định gía trị của nó là -1, nghĩa là không gioi hạn.

avatar trả lời ngày 9 tháng 7 bởi duchoang (950 điểm)  
đã sửa ngày 9 tháng 7 bởi admin
...