Wrap functie

Door Gerben Jacobs, 14 jaar geleden, 3.179x bekeken

De functie wrapItUpTacoBoy() staat misschien vol onzin en zo is deze functie eerst ook gemaakt, voor de lol, maar het is wel een handige.
Hier kun je 't principe zien.

Voor de normale en verkorte functie kun je wrapIt() gebruiken.

Deze functie returnt een waarde afkomstig uit een verkort if-statement. Eerst word er gekeken of de lengte van de string (strlen) niet langer is dan 't opgegeven characters ($howManyBeans of $a), is deze groter dan gebruiken we substr om een stukje string er uit te halen, we halen vanaf positie 0 tot aan positie $howManyBean (wat standaard 15 is) de letters eruit en plakken er ($withTomatoPlz of $f) aan vast, dit zijn standaard gewoon 3 puntjes, maar je kan er ook iets anders van maken.
Mocht 't niet langer zijn, dan geven we gewoon de hele string weer terug.

Uitkomst:

Quote:
This sentence i...
This sentence is way ...
And I'm not

Gesponsorde koppelingen

PHP script bestanden

  1. wrap-functie

 

Er zijn 19 reacties op 'Wrap functie'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Lode
Lode
14 jaar geleden
 
0 +1 -0 -1
Mijn oude variant op hele woorden indien mogelijk...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
function cutString($string, $maxChars, $separator, $break){
    if(strlen($string) < $maxChars){
        return $string;
    }

    else{
        $words        = explode($separator, $string);
        $numWords    = (is_array($words)) ? count($words) : 1;
        if($numWords == 1){
            return substr($string, 0, $maxChars).$break;
        }

        else{
            $myStr    = array();
            $sepLen    = strlen($separator);
            for($i=0; $i < $numWords; $i++){
                    $myStr[] = $words[$i];
                    $curLen     = strlen(implode($separator, $myStr));
                    $nextW      = (array_key_exists(($i+1), $words)) ? strlen($words[($i+1)]) : 0;
                    $nextLen = (strlen(implode($separator, $myStr)) + $nextW)+$sepLen;
                    if($nextLen > $maxChars){
                        break;
                    }
            }

            return implode($separator, $myStr).$break;
        }
    }
}

/* example */
echo cutString('Dit is een lang verhaal wat we gaan afkappen op een maximum aantal tekens en op hele woorden!', 20, ' ', '...');
?>
Jan geen
Jan geen
14 jaar geleden
 
0 +1 -0 -1
wordwrap doet hetzelfde toch?
Mebus  Hackintosh
Mebus Hackintosh
14 jaar geleden
 
0 +1 -0 -1
dit is geen wrap functie dit is een functie die zinnnen of worden gewoon korter maakt..
Jan geen
Jan geen
14 jaar geleden
 
0 +1 -0 -1
en wat doet een wrap functie dan volgens jou?
Michael
michael
14 jaar geleden
 
0 +1 -0 -1
ik vind als je een script post moet je minstends even de bullshit eruit halen en normale code gebruiken. Heel erg grappig maar alles behalve duidelijk.
Wout van der Burg
Wout van der Burg
14 jaar geleden
 
0 +1 -0 -1
TacoBoy..? =D
Robert Deiman
Robert Deiman
14 jaar geleden
 
0 +1 -0 -1
Beide functies zijn precies hetzelfde, maar binnen de functie doe je niets anders dan het gebruiken van strlen en substr.
Dit is eigenlijk niet echt een script te noemen, het is meer een voorbeeld van het gebruiken van strlen en substr binnen een functie.
Gerben Jacobs
Gerben Jacobs
14 jaar geleden
 
0 +1 -0 -1
@Rik: wordwrap() is iets anders.

@mebus: Er staat ook 'Voor de normale en verkorte functie kun je wrapIt() gebruiken.' Die andere functie is wel duidelijk, daar staat (misschien voor jou onzin namen) met leesbare variabele wat ze doen

@Robert: Tis inderdaad gewoon een functie, die voor sommige misschien wel handig kan zijn.
Leon Kunst
Leon Kunst
14 jaar geleden
 
0 +1 -0 -1
handig voor bijv laatste 5 nieuwsberichten zien ofzo :P
Arend a
Arend a
14 jaar geleden
 
0 +1 -0 -1
Deze functie houd rekening met hele woorden.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php

$text
= "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec egestas elit sapien. Pellentesque placerat ipsum placerat ligula. In in turpis eget elit pellentesque congue. Phasellus quis turpis. Nam sit amet nisl at purus ultrices aliquam. Fusce cursus, dui vitae gravida vulputate, nisl diam convallis lorem, id scelerisque lectus massa lobortis lacus. Aenean ac felis vitae mi tempus cursus. Mauris turpis. Quisque dapibus ante sit amet elit. Nullam auctor, orci sit amet tempor egestas, dui nibh vehicula mauris, ut placerat enim ligula ut diam. Curabitur vitae pede quis nibh porttitor aliquet. Cras imperdiet justo eget augue. In posuere laoreet eros. In vitae enim mattis nisl cursus mattis. Suspendisse aliquam ligula. Phasellus pellentesque tellus a orci. Nulla facilisi. Integer eget purus et augue vulputate tristique. Curabitur magna magna, molestie ac, condimentum ut, commodo a, risus. Sed bibendum.";


function
wrap($text,$offset,$continue = "..") {
  preg_match("/^(.{0," . (int) $offset . "})\s(.+)$/", $text, $matches);
  if (isset($matches[1])) {
    return $matches[1] . $continue;
  }
else {
    return $matches[0];
  }
}


print wrap($text,100);
?>
Jelle Posthuma
Jelle Posthuma
14 jaar geleden
 
0 +1 -0 -1
Mooier:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?php
function shorten( $string, $width, $endfix = "..") {
    $l = array(
        "a" => 4,
        "b" => 4,
        "c" => 4,
        "d" => 4,
        "e" => 4,
        "f" => 2,
        "g" => 4,
        "h" => 4,
        "i" => 0.8,
        "j" => 0.8,
        "k" => 4,
        "l" => 0.8,
        "m" => 6,
        "n" => 4,
        "o" => 4,
        "p" => 4,
        "q" => 3.5,
        "r" => 4,
        "s" => 3,
        "t" => 4,
        "u" => 4,
        "v" => 4,
        "w" => 6.2,
        "x" => 4,
        "y" => 4,
        "z" => 4,
        "A" => 5.1,
        "B" => 5.1,
        "C" => 5.1,
        "D" => 5.1,
        "E" => 5.1,
        "F" => 5,
        "G" => 5.1,
        "H" => 5,
        "I" => 1.1,
        "J" => 4,
        "K" => 5.1,
        "L" => 5.1,
        "M" => 6.2,
        "N" => 5,
        "O" => 5.1,
        "P" => 5.2,
        "Q" => 5.1,
        "R" => 5.1,
        "S" => 5,
        "T" => 5,
        "U" => 5,
        "V" => 5.2,
        "W" => 7,
        "X" => 5,
        "Y" => 5,
        "Z" => 5
    );
    $len = 0;
    $nstr = "";
    $sized = 0;
    $xfix = '';
    for( $i = 0 ; $i < strlen( $string ) ; $i++ ) {
        $cl = $string{ $i };
        if( isset( $l[ $cl ] ) )
            $clen = $l[ $cl ];
        elseif( $cl == " " )
            $clen = 3.7;
        else
            $clen = 4.5;
        $nstr .= $cl;            
        $len = $len + $clen + 0.02;
        if( ceil( $len ) >= $width ) {
            $sized = 1;
            break;
            
        }
    }

    $nstr = trim( $nstr );
    $sized == 1?$xfix = $endfix:$xfix = '';
    $nstr .= $xfix;
    return $nstr;
}

?>


Houdt strings in gelijke breedte als ik bijvoorbeeld de strings afkort naar 20 tekens toe, normaal krijg je dit:

wwwwwwwwwwwwwwwwwwww.. (20 tekens)
iiiiiiiiiiiiiiiiiiii.. (20 tekens)

Met deze functie wordt het:

iiiiiiiiiiiiiiiiiiii.. (20 tekens)
wwwwwww.. (7 tekend)
Lode
Lode
14 jaar geleden
 
0 +1 -0 -1
@Jelle:

En het nut daarvan mag zijn ?

@Arend
Daar hebben ze gewoon \w voor hoor binnen PCRE
Thijs X
Thijs X
14 jaar geleden
 
0 +1 -0 -1
@Arend,
Als iemand 1 heel lang woord typt dan klopt het dus niet meer heh.

@ Jelle,
Leuk idee maar is het is wel font afhandelijk.
Jelle Posthuma
Jelle Posthuma
14 jaar geleden
 
0 +1 -0 -1
Quote:
@Jelle:

En het nut daarvan mag zijn ?

Stel dat je een vaste breedte tabel/div hebt, dan is het mooier als het wat voller is dan dat je hele 'gaps' ertussen hebt:

+--------------------------------------+
|iiiiiiiiiiiiiiiiiiii...
|wwwwwwwwwwwwwwwwwwww...
+--------------------------------------+

Bij mijn script is het dus niet op basis van aantal letters, maar van de breedte van de string.

@Thijs,
Daar heb je gelijk in, maarja, het is natuurlijk aan te passen voor de font die je gebruikt.
Lode
Lode
14 jaar geleden
 
0 +1 -0 -1
@Jelle
Dan nog snap ik er het nut niet van!
dan wrapt ie 'm gewoon naar de volgende regel. De breedte heeft een maximum , de hoogte lijkt me oneindig...
Dus mij zal je nooit zien gebruiken.
Als je dat dan wil bereiken doe je gewoon een testje met WWWWW langste char over het algemeen... en zet je er een maximum op daarop gebasseerd.
Verder ontbreken alle leestekens en cijfers in je functie...
Arend a
Arend a
14 jaar geleden
 
0 +1 -0 -1
Lode: \w matched [A-Za-z0-9]. Niet een geheel woord, maar zoals je wil, hij kan ook beide doen: de eerste die hij zoekt is een oplossing om hele woorden af te breken, zijn ze te groot breekt hij het in kleine stukjes.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php

$text
= "Lorem dolor sit amet, consectetuer adipiscing elit. Donec egestas elit sapien. Pellentesque placerat ipsum placerat ligula. In in turpis eget elit pellentesque congue. Phasellus quis turpis. Nam sit amet nisl at purus ultrices aliquam. Fusce cursus, dui vitae gravida vulputate, nisl diam convallis lorem, id scelerisque lectus massa lobortis lacus. Aenean ac felis vitae mi tempus cursus. Mauris turpis. Quisque dapibus ante sit amet elit. Nullam auctor, orci sit amet tempor egestas, dui nibh vehicula mauris, ut placerat enim ligula ut diam. Curabitur vitae pede quis nibh porttitor aliquet. Cras imperdiet justo eget augue. In posuere laoreet eros. In vitae enim mattis nisl cursus mattis. Suspendisse aliquam ligula. Phasellus pellentesque tellus a orci. Nulla facilisi. Integer eget purus et augue vulputate tristique. Curabitur magna magna, molestie ac, condimentum ut, commodo a, risus. Sed bibendum.";

/*
wrap($text,$offset,$diff,$continue);
$text - the text to wrap
$offset - how many characters?
$diff - a diff of 10 with an offset of 50 will search for an ending of a whole word between 40 and 50 characters, if no whole word ends there, the sentence will be chopped at 50 characters.
*/


function wrap($text,$offset,$diff = 20, $continue = "..") {
  preg_match("/^(.{" . ($offset - $diff) . "," . (int) ($offset-1) . "}\S|.{" . $offset . "})(.+)$/", $text, $matches);
  if (isset($matches[1])) {
    return $matches[1] . $continue;
  }
else {
    return $matches[0];
  }
}


print wrap($text,60);
?>
Jelle Posthuma
Jelle Posthuma
14 jaar geleden
 
0 +1 -0 -1
@Lode,

Zelf gebruik ik het gewoon voor een tutorial lijst in een menu op mijn eigen site.
Dat komt er zo uit te zien:

- Tutorial over van alles en nog wat
- Nog een tutorial over van alles en nog wat

En dan is het niet mooi als die en wrapt naar de volgende regel.
Dan heb ik liever dat het allemaal tegen de rechter rand afkapt, wanneer er teveel tekens zijn.
Dan klik je er gewoon op als het je interesse wekt.

Is ook wat gebonden aan waarvoor je het nodig hebt.
In mijn situatie heb ik em wel nodig, is ook niet bedoelt voor alle doeleinden.
Lode
Lode
14 jaar geleden
 
0 +1 -0 -1
@Arend
kan allemaal:
\w any "word" character
\W any "non-word" character
\b word boundary
\B not a word boundary

en heb je genoeg aan denk ik...

@Jelle als jij er iets aan hebt veel genot ervan. Ik zie er geen heil in.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Arend a
Arend a
14 jaar geleden
 
0 +1 -0 -1
Lode: wat is nou precies je kritiek? Voor meer info over regex kan je mn tutorial lezen: http://www.phphulp.nl/php/tutorials/4/520/

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. wrap-functie

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.