defined var in preg_replace();
Om mijn probleem uit te leggen, begin ik eerst met het vertellen wat ik nu allemaal zoal heb:
Code (php)
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
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
?>
$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
^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
en die $kleuren[$1]; buiten die preg_replace() brengen lijkt mij onlogisch, aangezien de variabelen niet met een nummer mogen beginnen =/
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(); ?
Probeer je variabelen eens buiten quotes te zetten.
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
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.
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
Waar de kleur start is nu wel duidelijk (^...), maar hoe bepaal je waar een kleur eindigt?
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
Dit werkt:
Code (php)
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
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;
?>
$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!