Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Jak zrobić poprawnie nową linię co 70 znaków lub jeśli napotkano znak.
Forum PHP.pl > Forum > Przedszkole
casperii
Panowie jak poprawnie wykonać, żeby przenosiło do nowej linii po określonym znaku lub jeśli nie znaleziono określonego znaku to po określonej liczbie znaków?

  1. $co = strlen($result->ingredient);
  2. if($co>60){
  3. $skladnik = $result->ingredient;
  4. //$skladnik = str_replace(':', '<br>', $skladnik);
  5. $Value1 = wordwrap($skladnik, 60, "\n", true);
  6. $extra = 20;
  7. }else{
  8. $Value1 = $result->ingredient;
  9. }
Damonsson
Modulo?
casperii
  1. while ($result = $query ->fetch_object()){
  2. $co = strlen($result->ingredient);
  3. $ilerazy = $co/60;
  4. $iledodac = floor($ilerazy);
  5. if($co>60){
  6. $skladnik = $result->ingredient;
  7. //$skladnik = str_replace(':', '<br>', $skladnik);
  8. $Value1 = wordwrap($skladnik, 60, "\n", true);
  9. $extra = (24*$iledodac);
  10. }else{
  11. $Value1 = $result->ingredient;
  12. }
  13. }


Dlaczego jest tylko brany jeden rekord pod uwagę dla którego jest wykonywane $extra ? Tzn niech w bazie będą dwa składniki. Pierwszy z nich ma więcej niż 60 znaków - dlatego nie wykona się extra ,a dlatego drugiego tak ,mimo , że będzie on miał mniej niż 60 znaków.
KsaR
Cytat(casperii @ 27.07.2015, 20:53:45 ) *
Panowie jak poprawnie wykonać, żeby przenosiło do nowej linii po określonym znaku lub jeśli nie znaleziono określonego znaku to po określonej liczbie znaków?

  1. $co = strlen($result->ingredient);
  2. if($co>60){
  3. $skladnik = $result->ingredient;
  4. //$skladnik = str_replace(':', '<br>', $skladnik);
  5. $Value1 = wordwrap($skladnik, 60, "\n", true);
  6. $extra = 20;
  7. }else{
  8. $Value1 = $result->ingredient;
  9. }


  1. $string='ianckaxmoankdsk (...) Lorem Ipsum (...)'; // zmiena do rozdzielenia.
  2.  
  3. if (strpos($string,':')!==false) # jeśli znaleziono separator ( ":" ).
  4. {
  5. $str=str_replace(':',":\r\n",$string);
  6. }
  7. else # nie znaleziono.
  8. {
  9. $len=60; # co ile znaków
  10. $str=implode("\r\n",str_split($string,$len));
  11. }
  12.  
  13. echo '<pre>', $str, '</pre>';

casperii
@Ksar , podany przez Ciebie sposób wykonuję się trochę inaczej niż miałoby to u mnie wyglądać, ponieważ w twoim kodzie jest albo albo - jeżeli znajdzie znak ":" skacze do następnej linii LUB jeżeli nie znajdzie tego znaku to dopiero skacze po 60 znakach.

Ja chcę zrobić by i co 60 znaków skakało i po znalezieniu znaku ":" Ale trzeba to też jakąś z głową zrobić , że jak będzie do znaku ":" 30 znaków i przeniesie do nowej linii, to w nowej linii ma liczyć od 0 do 60 i później znowu przenieść do nowej linii.

Dodatkowo jak zrobić by wymusiło , że przecinek zostaje w starej linii, a nie przenosi do nowej linii bo źle to wygląda.
Jeszcze chciałbym zliczać ile razy zrobiło "enter" łącznie z tym wymuszonym po znaku ":"

Ponawiam pytanie, czy ktoś umiałby mi pomóc z w/w problemem?
Damonsson
Na szybko wklepane, pewnie można to zrobić sensowniej jakby pomyśleć
  1. $input = str_split('qwertyuiopa:1234567890,123456,789012345678901234567890123456789012345678,9012345
    678901234567890123456789012345678901234567890123456789012345678901234567890123456
    7890,12345678901234567890123456789,012345:678901234567890123456789012'
    );
  2. $i = 0;
  3.  
  4. foreach($input as $k => $char) {
  5. $i++;
  6. if($char === ':' || $i - 60 === 0) {
  7. if($input[$k+1] !== ',') {
  8. echo $char . '<br />';
  9. } else {
  10. echo $char;
  11. }
  12. $i = 0;
  13. } elseif($i === 1 && $char === ',') {
  14. echo $char . '<br />';
  15. $i = $i - 1;
  16. } else {
  17. echo $char;
  18. }
  19. }
Pyton_000
lub:
  1. $i = 0;
  2. $cos2 = '';
  3. foreach($input as $k => $char) {
  4. $cos2 .= $char;
  5.  
  6. if($i >= 60 || $char === ':') {
  7. if($input[$k+1] == ',') {
  8. $i++;
  9. continue;
  10. }
  11. $cos2 .= PHP_EOL;
  12. $i = 0;
  13. }
  14. $i++;
  15. }
casperii
@Pyton_000 a jak zrobić by teraz mi liczyło ile z tego stringa zrobiło się linijek?
Pyton_000
substr_count PHP_EOL
casperii
Albo to nie działa, albo nie potrafię tego użyć poprawnie.
$cos2 .= PHP_EOL;
$iledodac = substr_count($cos2);
Pyton_000
Żartujesz? Zajrzyj do man.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.