Avatar billede admin Novice
25. januar 2002 - 10:39 Der er 3 kommentarer og
1 løsning

Optimering af funktion

Vi har nedenstående funktion som vi ønsker hjælp til at få optimeret. Funktionen har 4 parametre :
$text      : Den streng der skal parses.
$starttag_a : Array med start tags.
$endtag_a  : Array med slut tags.
$user_func  : Den funktion der skal kaldes og have indholdet mellem et starttag og et sluttag som parameter.

<?
    function format ($text, $starttag_a, $endtag_a, $user_func) {
        // init
        $text_lc = strtolower($text);
        $endpos = 0;
        $new_text = "";
        do {
            // find the first $starttag
            $startpos_a = array();
            unset($lowest_pos);
            reset($starttag_a);
            while (list($key, $tag) = each($starttag_a)) {
                $startpos_tmp = strpos($text_lc, strtolower($tag), $endpos);
                if (!($startpos_tmp === false)) {
                    if (!isset($lowest_pos) || $startpos_tmp < $lowest_pos) {
                        $lowest_pos = $startpos_tmp;
                        $lowest_pos_key = $key;
                    }
                }
            }
            if (isset($lowest_pos)) {
                $startpos = $lowest_pos;
            } else {
                $startpos = false;
            }
            // format
            if (!($startpos === false)) {
                // get values
                $starttag = $starttag_a[$lowest_pos_key];
                $starttag_len = strlen($starttag);
                $endtag = strtolower($endtag_a[$lowest_pos_key]);
                $endtag_len = strlen($endtag);
                // format
                $new_text .= call_user_func($user_func, substr($text, $endpos, $startpos - $endpos));
                $endpos = strpos($text_lc, $endtag, $startpos) + $endtag_len;
                $new_text .= call_user_func($user_func, substr($text, $startpos + $starttag_len, $endpos - $startpos - $starttag_len - $endtag_len), $starttag);
            } else {
                $new_text .= call_user_func($user_func, substr($text, $endpos));
            }
        } while (!($startpos === false));
        return $new_text;
    }
?>
Avatar billede lars_jensen Nybegynder
25. januar 2002 - 10:46 #1
hmm, hvis ikke man først skulle bruge en halv time for at sætte sig ind i hvad det var funktionen skulle kunne, var det måske muligt at optimere - men nu ? hmm, det vil være som at famle i blinde...

PS. gælder også indlægget på sharks. Der hentyder i til "bugs" men ikke reelt hvilke bugs, hvordan de fremtræder osv.
Avatar billede admin Novice
25. januar 2002 - 11:09 #2
ok, jeg skal prøve at forklare det nærmere:
Vi har en tekst streng som indeholder tekst. Denne tekst kan f.eks. se således ud:
$text = "
Har du særlige forespørgsler, kan du kontakte Eksperten på info@eksperten.dk eller telefon +45 7027 0767.
<HTML><B>Jobannoncer på Eksperten</B></HTML>
Ønsker du at indrykke jobannoncer, kan du kontakte jobeasy.dk, der formidler salget af jobannoncer på Eksperten.
";

Funktionen kaldes således:
format($text, array("<HTML>"), array("</HTML>"), "myfunc");

Idéen er så at den tekst der ikke står mellem nogle af de tags der er angivet sendes til $user_func uden en parameter.
Hver tekst klump som står imellem et af de angivne tags, sendes til $user_func med det pågældende starttag.

Gav det mening ?
Avatar billede admin Novice
25. januar 2002 - 11:10 #3
Min $user_func ser således ud :

<?
    function format_func ($str, $starttag = "") {
        $starttag = strtoupper($starttag);
        switch ($starttag) {
            case "<HTML>" :
                return $str;
                break;
            case "<PHP>" :
                return $GLOBALS[$str];
                break;
            default :
                $str = htmlentities($str);
                // start tagster
                $tagster = new tagster;
                $str = str_replace(array("\r", "\n", "  ", "\t"), array("", "<BR>", "&nbsp; ", "&nbsp;&nbsp;&nbsp; "), $str);
                $str = $tagster->url_tagster($tagster->email_tagster($str));
                return $str;
                break;
        }
    }
?>
Avatar billede admin Novice
03. juli 2002 - 11:59 #4
jeg lukker :)
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
Kategori
Alle kurser indenfor Microsoft 365 – både til begyndere og øvede.

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