//ตัดอักขระบรรทัดใหม่ออก
$inputText = str_replace(array("\r", "\n"), "", $inputText);
// แยกส่วนเป็นคำๆ ด้วยช่องว่าง (อังกฤษจะมีช่องว่างเว้นระหว่างคำ)
$markov = explode(' ', $inputText);
// นับเอาจำนวนคำทั้งหมดที่แยกได้
$cnt = count($markov);
// สร้างอาเรย์เก็บข้อมูลชุดคู่ชั่วคราว
$pairs = array();
// วนลูปสร้างข้อมูลชุดคู่ (pairs)
for ($i = 0; $i < $cnt; $i += 2)
{
$ndx = @$markov[$i];
$val = @$markov[$i + 1];
//ถ้าอินเด็กเหมือนกัน จะโดนจัดเข้าชุดคู่เหมือนกัน*** (สำคัญ)
$pairs[$ndx][] = $val;
}
//จะได้ $pairs ที่มีข้อความชุดคู่ แบบมี index
//วนลูปทั้งหมด
//ดึงเอา index และสุ่มจากชุดข้อมูลคู่มาเรียงเป็นคำ
for ($i = 0; $i < count($pairs); $i++)
{
$aCurrent = current($pairs);
$key = key($pairs);
$current = $aCurrent[array_rand($aCurrent)];
$text .= $key. ' ' . $current . ' ';
next($pairs);
}
//ปิดท้ายด้วยตัด 1 อักษรแล้วเติม .
$last = strrpos($text, '.')+1;
$text = substr($text, 0, $last);
print $text;
แนวคิดคือ สมมุติผมมีบทความ
1 2 1 3 2 1 3 2 2 4 ทั้งหมด 10 คำ
เข้าระบบจัดชูดคู่ ก็จะ
รอบแรก - 1 2
1 เป็นอินเด็ก 2 เป็นคู่ (ยัดเข้า pairs)
รอบสอง - 1 3
1 เป็นอินเด็ก 3 เป็นคู่ (ยัดเข้า pairs)
สังเกตว่า อินเด็ก 1 จะมีข้อมูลลูก 2 ตัวคือ 2 กับ 3
ทำแบบนี้จนครบ จะได้
[1] {
2
3
}
[2] {
1
4
}
[3] {
2
}
ต่อมา ก็เรียกอินเด็กแรก คือ 1
มา แล้วสุ่ม จากข้างในมาหนึ่ง ซึ่งก็คือสุ่มระหว่าง 2 หรือ 3 ขึ้นมานั้นเอง
พอเข้าใจยังครับ

เรียกว่า กลุ่มข้อมูลอินเด็กชุดคู่ ก็ว่าได้
เน้นอินเด็กเหมือนกัน ก็อยู่ชุดเดียวกัน แล้วค่อยดึงมาจับคู่ใหม่เป็นบทความ