Memotong String Per-Kata [Solved]




<?php    

public function cut_words($sentence,$word_count)

  {

         $space_count = 0;

         $print_string = '';

         for($i=0;$i<strlen($sentence);$i++)

         {

          if($sentence[$i]=='')

             $space_count ++;

          $print_string .= $sentence[$i];

          if($space_count == $word_count)

          break;

         }

           echo $print_string;

   }

?>



agan2 senior tolongin saya dong, itu script saya motong kalimat per kata tapi kok nggak jalan di yii ya? pdhl di PHP biasa itu berjalan lancar, apa fungsi strlen tidak berjalan di yii? tolong para agan2 master, butuh ni… :(

kesalahannya di logika ente, ber,

bukan di yii-nya, selama pake fungsi2 php (strlen) di yii pasti jalan.

itu baris 8, sebelum space_count++

kok operand pembandingnya kosong? bukan spasi?


if($sentence[$i]=='')

  $space_count ++;



ini versi perbaikannya (nambah spasi doang)

ama test-nya sekalian:


class RandomTest extends CTestCase {

	public function cut_words($sentence,$word_count) {

         $space_count = 0;

         $print_string = '';

         for($i=0;$i<strlen($sentence);$i++)

         {

          if($sentence[$i]==' ')

          	$space_count ++;


          $print_string .= $sentence[$i];

             

          if($space_count == $word_count)

            break;

         }

         

         echo $print_string;

         return trim($print_string);

   }


   public function testKataTerpotongDenganBenar()

   {

   	$testSentence = 'ibu budi sedang memasak';


   	$result1 = $this->cut_words($testSentence, 1);

   	$result2 = $this->cut_words($testSentence, 2);

   	$result3 = $this->cut_words($testSentence, 3);

	$result4 = $this->cut_words($testSentence, 4);

	$result5 = $this->cut_words($testSentence, 5);


   	$this->assertEquals('ibu', $result1);

   	$this->assertEquals('ibu budi', $result2);

   	$this->assertEquals('ibu budi sedang', $result3);

   	$this->assertEquals($testSentence, $result4);

   	$this->assertEquals($testSentence, $result5);

   }

}

hasil testnya sebagai berikut:


$ phpunit unit/RandomTest.php 

PHPUnit 3.6.12 by Sebastian Bergmann.


Configuration read from /home/daud/project/iseng/apps/local/protected/tests/phpunit.xml


.ibu ibu budi ibu budi sedang ibu budi sedang memasakibu budi sedang memasak


Time: 1 second, Memory: 4.25Mb


OK (1 test, 5 assertions)

referensi:

http://www.yiiframework.com/doc/guide/1.1/en/test.unit

owalaaahhhhhhhh, Syukron om…barakalloh fikum… :wub:

eh tp di php biasa bener2 jalan pake itu :ph34r: Huft…tararengkyu skali lgi om yaa ;D

oiya om tanya lg dong, apa kalo upload web yang dibuat pake yii harus beserta master nya?? lumayan gede jg ya kalo gt? pdhl cuma mau bikin blog :o

iya, desainnya kan sebenernya 1 framework bisa dipake beberapa webapp,

tapi bisa diakalin dengan ngapus file2 yg gak perlu dari masternya

http://www.yiiframework.com/wiki/241/shrink-yii-help-your-ide-and-speed-up-copying/

atau saya pernah liat aplikasi yg pake yiilite

http://www.yiiframework.com/doc/guide/1.1/en/topics.performance#using-x-9x

om tanya lagi dong, itu kan sebenarnya saya ingin membuat blog, nah script diatas untuk memotong text, saya kan inputnya menggunakan editor widget editme jadikan yg kesimpen di database gak cuma text biasa aja tapi ada tag tag html semacam <div>, nah masalah nya muncul lg saat sudah berhasil saya potong tampilan saya kok jadi amburadul, saya kira karena tag - tag html nya ga sempurna, contohnya kan <div> diawal dibuka tapi karna text nya dipotong jadi ga ketutup </div>. biasanya gini solusinya gmn ya om?

wah kalo ini mah bukan potong string namanya, tapi html truncate, coba aja searching di google atau github. ini 1 contoh hasilnya.

saya dulu pernah bikin, tapi gak disimpen kodenya (belon ada github), logikanya gini,

[list=1]

[*]bikin stack

[*]untuk setiap kata pada kalimat lakukan

[*]jika "tag" push ke stack

[*]jika "kata" simpan posisi akhir karakter "kata" tersebut, dan wordcount++

[*]jika wordcount == yg diminta break loop

[*]echo substring dari depan sampai posisi tercatat

[*]tutup tag dengan ngepop tag satu persatu dari stack lalu bikin tag tutupnya

[/list]

oya kalo pake cara gini kamu perlu deklarasikan jenis2 tag yg gak pake penutup, misalnya br, hr, dll.

semoga membantu

sumpah om, anda itu keren. makasih banyak om, itu sangat berguna banget. sekali lagi makasih banyak, udah berhasil ni… :D

sip, good to hear that,

titlenya ditandai [solved] dong :)