Oluşan açısından bir cümlenin sözcükleri birleştirmek nasıl?

2 Cevap php

Örneğin ben, bir cümle var

John Doe, geçen yıl New York'a taşındı.

Şimdi tek kelimelerle cümle bölünmüş ve alıyorum:

array ('John', 'Doe', 'yeni', 'York' için ',' son ',' yıl 'taşındı')

Bu oldukça kolay. Ama sonra tüm oluşan terimleri almak için tek tek kelimeleri birleştirmek istiyorum. Oluşan terimler mantıklı eğer, ben olsa, hepsini almak istemiyor. Bu işlemin sonucu, bu gibi görünmelidir:

John Doe, John Doe, Doe taşındı taşındı için, John Doe taşındı Doe taşındı, taşındı ...

Sözler k parçaların bir limit şartlarını oluşmalıdır. Yukarıdaki örnekte, limit 3'tür. Yani bir terimdir, en fazla 3 kelimeleri içerebilir.

Sorun: PHP nasıl kompozisyon kod olabilir? Ben girdi olarak bir cümle alır ve çıkış olarak tüm şartları ile bir dizi verir bir işlevi olsaydı harika olurdu.

Bana yardımcı olur umarım. Şimdiden teşekkürler!

2 Cevap

Zaten bir diziye kelimeleri bölme için kod varsa, bu işlev size ifadeler olmak isteyen uzun seçmesini ve sizin için ifadeler içeren diziler bir dizi döndürür.

function getPhrases($array, $maxTerms = 3) {
    for($i=0; $i < $maxTerms; $i++) { //Until we've generated terms of all lengths
         for($j = 0; $j < (sizeof($array) - $i); $j++) { //Until we've iterated as far through the array as we should go
             $termArray[] = array(array_slice($array, $j, ($i+1))); //Add this part of the array to the array
         }
    }
    return $termArray;
}

//Usage example

$newarray = explode(" ", "This is a pretty long example sentence");
print_r(getPhrases($newarray));

Her bileşim, bir başlangıç ​​noktası tarafından tanımlanan ve bir uzunluk olacak - ile sadece döngü.

PHP tüm yol yardımcı olmaz, ancak bazı kullanışlı işlevler var.

$words = explode(" ", $sentence);
for ($start = 0; $start < count($words); $start++) //starting point
{
   //try all possible lengths
   //limit = max length
   //and of course it can't overflow the string
   for ($len = 1; $len <= $limit && $len <= count($words)-$start; $len++)
   {
      //array_slice gets a chunk of the array, and implode joins it w/ spaces
      $compositions[] = implode(" ", array_slice($words, $start, $len));
   }
}