Avatar billede Slettet bruger
04. august 2009 - 10:51 Der er 7 kommentarer og
1 løsning

Reducer længde af streng + gemme sidste hele ord

Hejsa,

Jeg ønsker at afkorte en streng, der er længere end x antal karakterer, hvor jeg samtidigt beholder sidste HELE ord. Altså noget i stil med:

"Husk alle relevante oplysninger om operativsystem"
- bliver til -
"Husk alle relevante ... operativsystem"

- noget i den stil :-)

Er der nogen, der kan hjælpe mig med det? *Fingers crossed* :-)

/Bays
Avatar billede medions Nybegynder
04. august 2009 - 10:56 #1
$ord = "Dette er en test, der skal fange første mellemrum efter 20 tegn";
$str = "";
for($i = 0; $i < strlen($ord); $i++) {
  if($i <= 20) {
    $str .= $ord{$i};
  } else {
    if($ord{$i} != " ") {
      $str .= $ord{$i};
    } else {
      break;
    }
  }
}
echo $str;


//>Rune
Avatar billede Slettet bruger
04. august 2009 - 11:14 #2
Hej - men dit forslag gemmer vel ikke det sidste hele ord (i dit eksempel altså "tegn")?
Avatar billede repox Seniormester
04. august 2009 - 11:19 #3
Den her kan gøre det:

    function shorten_string($string, $length)
    {
   
        $popped = false;
   
        $parts = explode(" ", $string);
        $last = $parts[(count($parts) - 1)];
        unset($parts[(count($parts) - 1)]);
       
        $string = implode(" ", $parts)." ".$last;
   
        while(true)
        {
            if(strlen($string) <= ($length))
                break;
            unset($parts[(count($parts) - 1)]);
            $string = implode(" ", $parts)."...".$last;
        }
               
        return $string;
    }

    $string = "Husk alle relevante oplysninger om operativsystem";
    echo shorten_string($string, 30);
Avatar billede repox Seniormester
04. august 2009 - 11:20 #4
Faktisk er der lige et par overflødige linier i funktionen - sådan her:

    function shorten_string($string, $length)
    {
        $parts = explode(" ", $string);
        $last = $parts[(count($parts) - 1)];
        unset($parts[(count($parts) - 1)]);
       
        $string = implode(" ", $parts)." ".$last;
   
        while(true)
        {
            if(strlen($string) <= ($length))
                break;
            unset($parts[(count($parts) - 1)]);
            $string = implode(" ", $parts)."...".$last;
        }
               
        return $string;
    }

Avatar billede Slettet bruger
04. august 2009 - 11:26 #5
repox - det er perfekt. Svar gerne for point!
Avatar billede repox Seniormester
04. august 2009 - 11:31 #6
Det kom her
Avatar billede Slettet bruger
04. august 2009 - 11:35 #7
Mange tak for hjælpen.
Avatar billede olebole Juniormester
04. august 2009 - 20:04 #8
<ole>

<?php
$s = "Husk alle relevante oplysninger om operativsystem";
define("MAX_NUM_CHARS", 35);

function truncateString($s="") {
    $a = explode(" ", $s);
    $last = end($a);
    return substr($s, 0, MAX_NUM_CHARS-(strlen($last)+5))." ... ".$last;
}

print truncateString($s);
?>

/mvh
</bole>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester