Rozkuskovanie stringu do <p>

Programovacie jazyky, rady, poradňa...
Snacker
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 362
Registrovaný: 08 jún 2009, 22:42
Kontaktovať používateľa:

Rozkuskovanie stringu do <p>

Príspevok od používateľa Snacker »

Zdravim,

Rozmyslam nad tym uz yopar dni ale neviem to algoritmizovat.

Ide o to, ze mam urcity dlhsi string. Napr.: "Dnes potrebujem nieco urobit a preto nemozem ist s tebou von. Dakujem za pochopenie.";

Tento string potrebujem rozkuskovat do pola, kde v kazdom poli bude moct byt max. pocet znakov 25 + <p> a </p> ,ktorymi bude ten string ohraniceny. 25 je maximum ale ukoncenie nemoze nastat v strede slova alebo useknut kusok zo slova ale musi byt vzdy cele.

To znamena, ze vystup z retazca, ktory som uviedol hore by bolo pole:

Kód: Vybrať všetko

$string[0] = "<p>Dnes potrebujem nieco</p>"; // 21 znakov
$string[1] = "<p>urobit a preto nemozem</p>"; // 22 znakov
$string[2] = "<p>ist s tebou von. Dakujem</p>"; // 24 znakov
$string[3] = "<p>za pochopenie.</p>"; // 14 znakov
Cize medzi <p> a </p> moze byt max. 25 znakov (aj s mederami) a musia tam byt iba cele slova. V pripade, ze jedno slovo je vacsie ako 25 tak ho brat ako 25 znakove a ist na dalsie.

Viete niekto poradit riesenie v tejto zaludnosti?

Dakujem
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Rozkuskovanie stringu do <p>

Príspevok od používateľa audiotrack »

http://www.hojko.com/rozdelenie-stringu ... 40076.html
nevidím v tom rozdiel, len si daj namiesto tých 30 znakov 25 a potom každý riadok obalíš tým tagom. Na konci vynecháš echo implode(" ",$out); a výstup máš v poli $out (tie p tagy si tam môžeš pridať potom cyklom foreach($out as $k=>$v) $v = "<p>".$v."</p>"; alebo si to budeš rovno upravovať pri vytváraní poľa miernou úpravou toho kodu čo som ti dal
Snacker
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 362
Registrovaný: 08 jún 2009, 22:42
Kontaktovať používateľa:

Re: Rozkuskovanie stringu do <p>

Príspevok od používateľa Snacker »

Kód: Vybrať všetko

$startString = "Masarykova kolónia bankových úradníkov toto bol oficiálny názov obytného bloku, ktorý podľa projektu. ";

$i = $j = $start = 0;
$finish = 25;
$out = array();  

$arr = explode(" ",$startString);  
while($i < count($arr)){  
   if($start + ($arr[$i] != "<br/>" ? strlen($arr[$i]) : 0) + 1 < $finish){  
     $out[$j++] = " ".$arr[$i];  
     if($arr[$i] != "<br/>") $start  += strlen($arr[$i]) + 1;
        else $start = 0;
      $i++;   
      } else {
      if($out[$j-1] != "<br/>" && $arr[$i] != "<br/>") $out[$j++] = "<br />"; 
      $start = 0;
      }
}

 foreach($out as $k=>$v)  {
 $v = "<p>".$v."</p>";
 echo $v;
 }
Vystup mi to da nejaky divny:

Kód: Vybrať všetko

<p> Masarykova</p><p> kolónia</p><p><br /></p><p> bankových</p><p> úradníkov</p><p><br /></p><p> toto</p><p> bol</p><p> oficiálny</p><p><br /></p><p> názov</p><p> obytného</p><p> bloku,</p><p><br /></p><p> ktorý</p><p> podľa</p><p> projektu.</p><p> </p>string(8) "<p> </p>"
Rozdeluje mi to len po slove a este mi tam aj pcha tie <br /> co vobec nechcem.
Mmartin
Guru
Guru
Používateľov profilový obrázok
Príspevky: 2786
Registrovaný: 07 feb 2009, 12:49
Bydlisko: Bratislava

Re: Rozkuskovanie stringu do <p>

Príspevok od používateľa Mmartin »

Ano, lebo to rozdeluje podla medzier :roll: , vsak citaj nazov temy..
Snacker
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 362
Registrovaný: 08 jún 2009, 22:42
Kontaktovať používateľa:

Re: Rozkuskovanie stringu do <p>

Príspevok od používateľa Snacker »

Mmartin napísal:Ano, lebo to rozdeluje podla medzier :roll: , vsak citaj nazov temy..
Vsak ty vobec ani nevies o co ide, na rozdelenie podla medzier by mi stacil explode
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Rozkuskovanie stringu do <p>

Príspevok od používateľa audiotrack »

už som si nepamätal presne čo si vtedy chcel, tak som si to teraz poriadne nepozrel čo ti posielam. Moja chyba (ale hlavne tvoja že nerozmýšlaš). Dal som ti link na zlý príspevok, myslel som ten predchádzajúci. Ten kod čo som ti robil, kde to ešte nešlo cez polia lebo si nemal tú požiadavku s br. Tam sa tie riadky iba vypisovali, tu ich budeš dávať do poľa

Kód: Vybrať všetko

<?php


$startString = "Masarykova kolónia bankových úradníkov toto bol oficiálny názov obytného bloku, ktorý podľa projektu. ";

$startString = nl2br($startString); // Zmenim /n na HTML tag <br />

//$startString=preg_replace('/(<br(\x20)*\/>(\x20)*)+/',' <br/> ',$startString);

// Odstranenie nadbytocnych medzier
$startString = preg_replace("/ {2,}/", " ", $startString);



$startString = "Masarykova kolónia bankových úradníkov toto bol oficiálny názov obytného bloku, ktorý podľa projektu. ";

echo $startString;
echo "<br />";

$i = $j = $start = 0;
$finish = 30;

$out = array();
$arr = explode(" ",$startString);  //podelim si string po medzerach
while($i < count($arr)){  //kým nevypíšem všetky slová
   $start += strlen($arr[$i]) + 1;  //pripocitam slovo do dlzky (+1 kvoli medzeram medzi slovami)
   if($start < $finish){  //ak sa zmestim do riadku
      $out[$j] .= $arr[$i];  //vypisem slovo
      $i++;   //a idem na dalsie
      } else {
      $j++; //inak odentrujem
      $start = 0; //a ratam dlzku odznova
      }
}
foreach($out as $k=>$v)  {
$out[$k] = "<p>".$v."</p>";
}


var_dump($out);

?>
Snacker
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 362
Registrovaný: 08 jún 2009, 22:42
Kontaktovať používateľa:

Re: Rozkuskovanie stringu do <p>

Príspevok od používateľa Snacker »

jj, diki moc je to presne to. Este som tam doplnil " ".$arr[$i]; aby to davalo medzeru za slovom.

Dakujem, slubujem, ze si ten kod uz dokladne prestudujem :D
Napísať odpoveď