Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Diziden Belli Sayıda Kelime Çekmek

Konu, 'PHP' kısmında dinlex tarafından paylaşıldı.

  1. dinlex

    dinlex Üye

    Kayıt:
    23 Aralık 2016
    Mesajlar:
    232
    Beğenilen Mesajlar:
    59
    Şehir:
    Hatay
    Arkadaşlar bir makaledeki ilk 60 kelimeyi çekmek ve kısa bir yazı olarak paylaşmak istiyorum ama yapamadım, yardımcı olursanız sevinirim.

    Aşağıdaki gibi yapmaya çalıştım, eksiğim nerede acaba?
    Örnek olarak 10 kelimelik bir yazı yazdım, bunun ilk 6 kelimesini yazdırmak istiyorum mesela.
    PHP:
    $makale "Deneme bir iki üç dört beş altı yedi sekiz dokuz on"//makalemiz bu

    $kelimeler explode(" "$makale); //Boşluktan patlatarak kelimeleri ayırdım, dizi haline geldi.

    $gerekliler array_slice($kelimeler07); //ilk 6 kelimenin olduğu yeni bir dizi yaptım.

    foreach($gerekliler as $kelime){ echo $kelime." "; }

    Burada "Deneme bir iki üç dört beş " çıktısı vermesi gerekiyor işte ama nerede hata yapıyorum bilemedim.
     
  2. tst

    tst Aktif Üye

    Kayıt:
    27 Ocak 2009
    Mesajlar:
    269
    Beğenilen Mesajlar:
    4
    Yeni bir dizi yapmaya gerek yok bence.

    $str= implode(" ",array_slice(explode(" ",$makale),0,60));

    echo $str;

    ---
    veya

    $str="";
    for($i=0;$i<60;$i++){

    $str +=$kelimeler[$i]." ";

    }

    echo $str;


    Ha bu arada dizide 60 eleman yoksa o zaman da hata verir onun kontrolünü ayrıca yapmalısın
     
    Son düzenleme: 7 Ağustos 2017
    dinlex bunu beğendi.
  3. yunus

    yunus Daimi Üye

    Kayıt:
    26 Şubat 2015
    Mesajlar:
    517
    Beğenilen Mesajlar:
    124
    Tekrar kullanılabilirlik açısından bunu bir fonksiyon olarak tasarlamak daha iyi olabilir.
    Yukarıda explode ile diziye ayrılıp array_slice fonksiyonu ile ayırmak sonra tekrar implode ile birleştirmek şeklinde yapılabileceği gibi.
    regex ile de kısmen daha hızlı işlem yapılabilir. hız farkı olurmu bilemiyorum test etmek lazım.
    Ayrıca regex türkçe karakterler için unicode desteğini aktif etmek gerekiyor ki bunu da "u" bayrağıyla yapıyoruz. tabi metin kaynağının da unicode formatında olması gerekiyor.

    PHP:
    function kelime_al($makale$adet60) {
      
    preg_match("/(?:\w+(?:\W+|$)){0,$adet}/u"$makale$yakalanan);
      return 
    $yakalanan[0];
    }

    echo 
    kelime_al($makale// 60 adet kelime
    echo kelime_al($makale,15// 15 adet kelime
    $makeledeki kelime adedinin girilen $adet değerinden az olması herhangi bir sorun teşkil etmiyor.
     
    dinlex ve tst bunu beğendi.
  4. dinlex

    dinlex Üye

    Kayıt:
    23 Aralık 2016
    Mesajlar:
    232
    Beğenilen Mesajlar:
    59
    Şehir:
    Hatay
    Teşekkürler ama 60tan az olabilir. Yazılar üyeler tarafından yazılacak, kimisi 10 kelime yazar kimisi 500 kelime. Ama yine de aklımda bulunsun söylediğiniz, kullanabilirim belki. Yunus beyin söylediğinde de ufak bir sorunum oldu çünkü. Teşekkür ederim yardım için...
     
  5. dinlex

    dinlex Üye

    Kayıt:
    23 Aralık 2016
    Mesajlar:
    232
    Beğenilen Mesajlar:
    59
    Şehir:
    Hatay
    Hocam çok güzel çalıştı ama ufak bir sorunum var. Şu "/(?:\w+(?:\W+|$" tarzı karışık kuruşuk şeyleri bir türlü öğrenemediğim için ben yapamadım ama siz yapabilirsiniz belki. Ben sitemde BB kodu da kullanıyorum "kalın kelime" şeklinde. Şimdi "bir iki üç dört" şeklinde olan bir yazıyı sizin kodunuz sorunsuz çalıştırıyor istediğim gibi ama eğer yazıda "bir iki üç dört" gibi BB kodu varsa boş dönderiyor. Bütün karakterleri kullanabilecek şekilde nasıl yapabiliriz bunu?
     
  6. dinlex

    dinlex Üye

    Kayıt:
    23 Aralık 2016
    Mesajlar:
    232
    Beğenilen Mesajlar:
    59
    Şehir:
    Hatay
    Ayrıca geç cevap verdiğim için de özür dilerim. Konuyu açıp kaçmış gibi hissettim ama fırsatım olmadı PC başına geçmeye.
     
  7. dinlex

    dinlex Üye

    Kayıt:
    23 Aralık 2016
    Mesajlar:
    232
    Beğenilen Mesajlar:
    59
    Şehir:
    Hatay
    Arkadaşlar hala çözemedim sorunu, yok mu anlayan bu işten. @tst nin söylediğini yapayım dedim, ama yine kelime sayısını önceden belirleyip ona göre listelemek gerekiyor ki bu da hostingi zorlar biraz. Biraz daha hafif bir yolunu bilen yok mu?