Yêu cầu thg 12 20, 2020 3:20 SA 93 0 2
  • 93 0 2
+1

Lấy ngẫu nhiên 1 đoạn paragraph từ 1 string (trong PHP)

Chia sẻ
  • 93 0 2

Mình đang muốn thực hiện một điều có vẻ hơi khó khăn.

$string = '<p>Coca-cola được thành lập vào ... </p>
 <p>Coca-cola vị nguyên bản có thành phần chủ yếu là .... </p>
 <p>Coca-cola ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. </p>';

Mình có ý tưởng nào lấy ngẫu nhiên một đoạn văn trong string trên không? Ví dụ như biến nó thành array, rồi dùng array_rand() hoặc shuffle. Hoặc dùng các hàm pregmatch, regex chẳng hạn.

Mục đích cuối cùng mình muốn thực hiện là:

Bạn có biết?

Coca-cola vị nguyên bản có thành phần chủ yếu là ....Tìm hiểu thêm.

2 CÂU TRẢ LỜI


Đã trả lời thg 12 20, 2020 4:17 SA
+3

Sau một hồi thử nghiệm

$string = '<p>Coca-cola được thành lập vào ... </p>
 <p>Coca-cola vị nguyên bản có thành phần chủ yếu là .... </p>
 <p>Coca-cola ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. </p>';
 
 $pattern = '|<p>(.+?)</p>|';
  if(preg_match_all($pattern, $string, $matches)) {
  shuffle($matches[0]);
  echo $matches[0][0];
}

Trên thực tế, $string thường dính lẫn các paragraph không có text, tức là <p></p> hoặc <p>&nbsp;</p> nên phải làm thêm bước đệm là loại <p>&nbsp;</p> ra khỏi string ban đầu.

Chia sẻ
Đã trả lời thg 12 30, 2020 3:25 SA
+1

Đây là code của mình, mời bạn xem thử

$str = '<p> String in the middle </p>  <p> String abcde </p> <p> String defg </p>';

if (preg_match_all('/<p>(.*?)<\/p>/', $str, $match)) {
    echo $match[0][array_rand($match[0])];
}
Chia sẻ
Avatar Dr Dokkan @dokkan7
thg 1 8, 2021 6:05 SA

Ngắn gọn hơn một chút!

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí