10. februar 2004 - 15:50Der er
32 kommentarer og 1 løsning
Erstat <br> med billeder
Hej.
Jeg har problemer med at lave et script, hvor jeg hiver nogle $row[billedeadresser] ud af en tabel. Disse $row[billedeadresser] skal udskiftes med de første <br> i $row[teksten].
Et eksempel, der illustrerer min problemstilling:
I $row[teksten] sker følgende: <br1> udskiftes med billedeadresse[1] <br2> udskiftes med billedeadresse[2] <br3> udskiftes med billedeadresse[3] - når der ikke er flere billedeadresser forbliver de resterende <br>'s.
Det skal siges, at <br>'erne er placeret på flg måde i $row[teksten]:
<br>tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst <br>tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst <br> <br>tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst
Hvis du har dine billedadresser liggende i et array: $billedeadresse() burde eksemplet virke. Den vil dog ikke udskifte de nederste, men de første (som du beskrev i spørgsmålet).
"der mindst skal være 100 tegn imellem 2 <br>'s" - bliver lidt langhåret. Hvis du kan nøjes med "100 tegn uden <br> før en <br>" er det straks lidt nemmere.
Forskellen er at i den nye definition vil du ikke få en match på den første <br> hvis den er inden for de første 100 tegn.
Hvis den antagelse kan accepteres kan du bruge: /(?<=[^(<br>)]{100})<br>/
Og så skal du lige være opmærksom på at der er sat en limit på een match i ovenstående preg_replace eksempler. Enten skal du helt udelade 4. argument, eller så skal du sætte det til -1. ( eller endnu bedre i dit tilfælde: længden af dit $billedeadresse array ).
Summa summarum: $row['teksten'] = preg_replace("/(?<=[^(<br>)]{100})<br>/", $billedeadresse[$i], $row['teksten'], count($billedeadresse) );
regexp's er ikke min livret. Det går jo galt i andet gennemløb, da den så vil matche alle <br> (da den forrige jo er byttet ud). Jeg er faktisk ikke sikker på hvordan du løser det.
Jo, det kan man sikkert godt. Jeg ved bare ikke helt hvordan regexp skal se ud. Ellers kan du måske prøve dig frem til hvilke karakterer der angiver "new line" i din database. Fx: "/<br>\r\n<br>/" eller "/<br>\\n\\n<br>/".
Rodede lidt mere med det: <?php $row["teksten"] = "0123456789<br>0123456<br>abc<br>0123456789<br>asdfes"; $billedeadresse = array( "<img src='img1.gif'>", "<img src='img2.gif'>", ); echo preg_replace("/(.{10,}?)(<br>)/e",'"$1".(count($billedeadresse>0)?array_shift($billedeadresse):"$2" )',$row["teksten"]); ?> Resultat: 0123456789<img src='img1.gif'>0123456<br>abc<img src='img2.gif'>0123456789asdfes
Første <br> bliver udskiftet med første billede da den har 10 eller mere karakterer inden (0123456789). Anden <br> bliver IKKE udskiftet, da den kun har 7 karakterer inden (0123456) Tredie <br> bliver udskiftet med andet billede da den har 10 eller mere karakterer inden ( 0123456<br>abc ). <br> nr2 tæller her med som karakterer da de ikke blev matchet på sidst. Fjerde <br> har godt nok 10 karakterer, men bliver ikke udskiftet, da der ikke er flere billeder i $billedeadresse.
Ok, det var mest for at vise en copy/paste version der fungerer. Din version med 100 karakterer inden en <br> vil så se således ud:
Mange tak for hjælpen! Da der ikke er nogen, der har afgivet svar, lukkes tråden.
Synes godt om
Ny brugerNybegynder
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.