defined var in preg_replace();

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Eduard

Eduard

24/03/2008 16:19:00
Quote Anchor link
Zalig Pasen iedereen ;)

Om mijn probleem uit te leggen, begin ik eerst met het vertellen wat ik nu allemaal zoal heb:

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
<?php

$kleuren
=array();
$kleuren['^0'] = "000000";
$kleuren['^1'] = "DA0120";
$kleuren['^2'] = "00B906";
//...
$kleuren['^8'] = "CA7C27";
$kleuren['^9'] = "757575";
$kleuren['^a'] = "EB9F53";
$kleuren['^b'] = "106F59";
$kleuren['^c'] = "5A134F";
$kleuren['^d'] = "035AFF";
$kleuren['^e'] = "681EA7";
//...
$kleuren['^w'] = "FFFFFF";
$kleuren['^x'] = "CA7C27";
$kleuren['^y'] = "757575";
$kleuren['^z'] = "CC8034";

// gegevens uit db ophalen + while
 $nickname=$row['nickname'];

 $nickname = preg_replace("#(\^[0-9a-z])(.*?)(\^[0-9a-z]| )#si", "<span style='color: $kleuren[$1];'>$2</span>$3", $nickname);

//gekleurde nicknames weergeven + sluiten van while
?>


even wat meer over die preg_replace(),
ik haal even 2-3 voorbeeldjes uit mijn db:

db:
^prandom skill
^whust^5'
^1wArning^0! ^7Winghaven


dus elk hoedje (^) gevolgd door een cijfer of een klein letter moet een kleur voorstellen, dat doe ik met dit: (\^[0-9a-z])

Verder moet ik weten waar die kleur moet stoppen, of te wel bij de volgende hoedje (gevolgd door een cijfer/klein letter), of te wel als er geen cijfers/letters meer over zijn/ bij het einde van de nickname dus. Maar ik heb tot nu toe nog niet kunnen vinden hoe ik dat correct met preg_replace() kan speciferen

Mijn probleem is due die variabele binnen de span tags. Kan maar niet opkomen hoe ik het juist moet doen.
error:
Parse error: syntax error, unexpected '$', expecting T_STRING or T_VARIABLE or T_NUM_STRING in xxx
Gewijzigd op 01/01/1970 01:00:00 door Eduard
 
PHP hulp

PHP hulp

24/04/2024 16:39:33
 
Eduard

Eduard

25/03/2008 01:20:00
Quote Anchor link
en die $kleuren[$1]; buiten die preg_replace() brengen lijkt mij onlogisch, aangezien de variabelen niet met een nummer mogen beginnen =/
 
Eduard

Eduard

26/03/2008 01:36:00
Quote Anchor link
een bumpke dan maar...

om het beknopt te houden, mocht je geen zin hebben om eerste post te lezen of het nog niet gesnapt hebben:

hoe kan ik een var oproepen binnen de span tags binnen mijn preg_replace(); ?
 
Arend a

Arend a

26/03/2008 07:09:00
Quote Anchor link
Probeer je variabelen eens buiten quotes te zetten.
 
Eduard

Eduard

26/03/2008 09:21:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
"<span style='color: ".$kleuren[$1];.";'>$1</span>$2"


ik denk dat die $1 binnen de array var niet meer herkend wordt en nu het zo gezegd buiten de quotes van preg_replace(); staat, het als een echte variabele gezien wordt, maar variabelen mogen toch niet met een nummer beginnen?

error:
"<span style='color: ".$kleuren[$1];.";'>$2</span>$3"


edit:
bovendien worden toch alle $0, $1, $2... binnen de quotes van preg_replace(); geplaatst?
Gewijzigd op 01/01/1970 01:00:00 door Eduard
 
Jan Koehoorn

Jan Koehoorn

26/03/2008 09:31:00
Quote Anchor link
Misschien is een andere opzet handiger. Als je een veld met de username en een veld met de kleurcode hebt, kun je gewoon met str_replace werken.
 
Eduard

Eduard

26/03/2008 09:44:00
Quote Anchor link
denk dat 1 van ons elkaar niet begrijpt ^^

Een nickname kan meerdere kleuren bevatten, en 't is voor PHP om uit te zoeken welke kleur(en) en waar die start(en)/stop(pen)t

Dus ik zou niet weten welke waarde(n) er in die veld van kleurcode in zou moeten
Gewijzigd op 01/01/1970 01:00:00 door Eduard
 
Joren de Wit

Joren de Wit

26/03/2008 09:49:00
Quote Anchor link
Waar de kleur start is nu wel duidelijk (^...), maar hoe bepaal je waar een kleur eindigt?
 
Eduard

Eduard

26/03/2008 09:53:00
Quote Anchor link
bij de volgende (\^[0-9a-z]) of als er geen andere kleur is dan daar waar de nickname stopt




ik had het eerst helemaal in het begin al omgezet met 20 preg-replace()'s en in db gedropt, maar toen werden niet alle kleuren vervangen aangezien ik bij mijn 2de replace al met een nickname te maken had die span tags bevatte...dus die preg-replace's werden alsmaar moeilijker te bouwen en onoverzichtelijker vandaar dat ik dus verder zocht om het te proberen vereenvoudigen
Gewijzigd op 01/01/1970 01:00:00 door Eduard
 
Joren de Wit

Joren de Wit

26/03/2008 10:05:00
Quote Anchor link
Allereerst is de ^ niet echt slim gekozen aangezien die ook een bepaalde functie heeft in een regex, vandaar dat ik er in dit voorbeeldje een % van gemaakt heb.

Dit werkt:
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
<?php
$kleuren
=array();
$kleuren['%0'] = "000000";
$kleuren['%1'] = "DA0120";
$kleuren['%2'] = "00B906";
//...
$kleuren['%8'] = "CA7C27";
$kleuren['%9'] = "757575";
$kleuren['%a'] = "EB9F53";
$kleuren['%b'] = "106F59";
$kleuren['%c'] = "5A134F";
$kleuren['%d'] = "035AFF";
$kleuren['%e'] = "681EA7";
//...
$kleuren['%w'] = "FFFFFF";
$kleuren['%x'] = "CA7C27";
$kleuren['%y'] = "757575";
$kleuren['%z'] = "CC8034";

$nickname= '%1wArning%0! %dWinghaven';

foreach($kleuren as $tag => $kleur)
{

    $nickname = preg_replace("_".$tag."([^%]+)_si", "<span style='color: ".$kleur.";'>$1</span>", $nickname);
}


echo $nickname;
?>

Zoals je ziet loop je gewoon door de array met kleuren en kijk je of de betreffende tag in de string voorkomt. Zo ja: vervangen!
 



Overzicht Reageren

 
 

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.