Asked Dec 20th, 2020 3:20 a.m. 89 0 2
  • 89 0 2
+1

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

Share
  • 89 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 ANSWERS


Answered Dec 20th, 2020 4:17 a.m.
+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.

Share
Answered Dec 30th, 2020 3:25 a.m.
+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])];
}
Share
Avatar Dr Dokkan @dokkan7
Jan 8th, 2021 6:05 a.m.

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

0
| Reply
Share
Viblo
Let's register a Viblo Account to get more interesting posts.