Pereiti prie turinio

PHP sakinio su žodžiais išplėtimas


Rekomenduojami pranešimai

Gal galit užvesti ant kelio kaip atlikti tokią užduotį:

Iš formos gaunamas ilgas sakinys. Jį reikia suformatuoti taip, kad pirma sakinio dalis užimtų 31 simbolį. Jei ties 31 simboliu yra žodžio vidurys, reikia ta žodį patraukti tarpais iki 31 simbolio, kad žodis jau prasidėtu 32 simboliu sakinyje.

 

Pvz.:

Labai ilgas sakinys su daug žodžių jame

Labai ilgas sakinys su daug    žodžių jame

 

Mintys sukasi apie sakinio išskaidyma į atskirus žodžius, vėliau skaičiuoti atskirų žodžių simbolių kiekį, juos apjunginėti ir tikrinti ar su sekančiu žodžiu bus viršytas 31 simbolis ar ne, jei taip - pridėti tarpų ir prijungti likusius žodžius.

Bet viskas gan gremėsdiškai atrodo. Gal yra kokių paprastesnių būdų? :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nesuprantu kam tau to reikia...

 

Tau reik suprast tik užduotį, o ne "kam" to reik :)

Matyt kokia nors kursų/mokymosi užduotis ar kas nors pan. ir tiek. Panašu į word wrap'ą.

 

Aš jei daryčiau tą užduotį, tai spėju imčiau 31 simbolį, pažiūrėčiau ar ne tarpas, ir eičiau po vieną simbolį atgal iki kol aptikčiau tarpą.

Kiek žingsnių atgal teks eit, tiek ir tarpų reiks pridėt į tą vietą, kur tarpą aptiksiu.

Redagavo nsc
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pasirašiau. Viską kaip ir atlieka. Bet gal kas kokių pastabų turit kaip sumažinti ar supaprastinti?

 

$sentence= "Labai ilgas tekstas. Su labai daug zodziu, raidziu, kableliu.";
echo "<pre>" . some_function($sentence,31) . "</pre>";

function some_function($sentence,$lenght){
       $string = substr($sentence,0,$lenght);
$last = strrpos($string," ");
       $start = substr($string,0,$last);
$start = trim($start);
$end = substr($sentence, $last);
$end = trim($end);
if (strlen($start) < $lenght) {
	$add = str_repeat(" ", ($lenght-strlen($start)-1));
	$start .= $add;
}
$start .= $end;
return $start;
}

Redagavo nixas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pasirašiau. Viską kaip ir atlieka. Bet gal kas kokių pastabų turit kaip sumažinti ar supaprastinti?

 

$sentence= "Labai ilgas tekstas. Su labai daug zodziu, raidziu, kableliu.";
echo "<pre>" . some_function($sentence,31) . "</pre>";

function some_function($sentence,$lenght){
       $string = substr($sentence,0,$lenght);
$last = strrpos($string," ");
       $start = substr($string,0,$last);
$start = trim($start);
$end = substr($sentence, $last);
$end = trim($end);
if (strlen($start) < $lenght) {
	$add = str_repeat(" ", ($lenght-strlen($start)-1));
	$start .= $add;
}
$start .= $end;
return $start;
}

 

Man atrodo lyg ir gerai, vistiek reikės tas funkcijas naudoti, kad ieškoti paskutinio tarpo. Aš asmeniškai kažką tokio būčiau pasirašęs, su šiek tiek mažiau kintamųjų, bet skirtumo didelio greičiui manau čia nepadarysi su tokiom funkcijom. Taip pat vietoj to $start, $add, $end lipdymo, yra funkcija įterpti (/pakeisti) tekstą tekste - substr_replace

function some_function($sentence,$lenght){
   $char = $sentence[$lenght-1]; // Patikrinam 31ą simbolį
   if($char != ' '){ // Jei ne tarpas
       $last_char = strrpos(substr($sentence,0,$lenght), ' '); // Surandam paskutinio tarpo prieš tai poziciją
       return substr_replace($sentence, str_repeat(' ',$lenght-$last_char-1), $last_char, 0); // Įterpiam reikalingus tarpus ten, kur paskutinis buvo rastas
   }
   return $sentence;
}

Redagavo GPC
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Man atrodo lyg ir gerai, vistiek reikės tas funkcijas naudoti, kad ieškoti paskutinio tarpo. Aš asmeniškai kažką tokio būčiau pasirašęs, su šiek tiek mažiau kintamųjų, bet skirtumo didelio greičiui manau čia nepadarysi su tokiom funkcijom. Taip pat vietoj to $start, $add, $end lipdymo, yra funkcija įterpti (/pakeisti) tekstą tekste - substr_replace

function some_function($sentence,$lenght){
   $char = $sentence[$lenght-1]; // Patikrinam 31ą simbolį
   if($char != ' '){ // Jei ne tarpas
       $last_char = strrpos(substr($sentence,0,$lenght), ' '); // Surandam paskutinio tarpo prieš tai poziciją
       return substr_replace($sentence, str_repeat(' ',$lenght-$last_char-1), $last_char, 0); // Įterpiam reikalingus tarpus ten, kur paskutinis buvo rastas
   }
   return $sentence;
}

 

Didelis ačiū :) dar papildžiau kodą tikrinimu, ar sakinys nėra trumpesnis, nes priešingu atvėju pas tave klaida meta, nes neranda 31 simb.

 

function some_function($sentence,$lenght){
   if(strlen($sentence) <= $lenght) return $sentence;
   $char = $sentence[$lenght-1]; // Patikrinam 31ą simbolį
   if($char != ' '){ // Jei ne tarpas
       $last_char = strrpos(substr($sentence,0,$lenght), ' '); // Surandam paskutinio tarpo prieš tai poziciją
       return substr_replace($sentence, str_repeat(' ',$lenght-$last_char-1), $last_char, 0); // Įterpiam reikalingus tarpus ten, kur paskutinis buvo rastas
   }
   return $sentence;
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Didelis ačiū :) dar papildžiau kodą tikrinimu, ar sakinys nėra trumpesnis, nes priešingu atvėju pas tave klaida meta, nes neranda 31 simb.

 

function some_function($sentence,$lenght){
   if(strlen($sentence) <= $lenght) return $sentence;
   $char = $sentence[$lenght-1]; // Patikrinam 31ą simbolį
   if($char != ' '){ // Jei ne tarpas
       $last_char = strrpos(substr($sentence,0,$lenght), ' '); // Surandam paskutinio tarpo prieš tai poziciją
       return substr_replace($sentence, str_repeat(' ',$lenght-$last_char-1), $last_char, 0); // Įterpiam reikalingus tarpus ten, kur paskutinis buvo rastas
   }
   return $sentence;
}

 

Taip, teisingai, dar turbūt reiktų patikrinti ar rado $last_char, jei ne, reiškia žodis ilgesnis negu duotas $length (nuo pat pradžios iki n simbolio nėra tarpų), ir reikia išmesti žinutę, error'ą ar ką, čia jau nuo tavo situacijos priklauso.

Redagavo GPC
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...