Avatar billede webweaver Praktikant
13. februar 2011 - 15:06 Der er 3 kommentarer og
1 løsning

Str_replace og arrays

Hey guys.

Jeg sidder og er ved at kode noget log og jeg oplever et underligt/irriterende problem. Jeg kan ikke rigtig se hvad der skaber problemet desværre, så jeg må jo forhøre mig her.

Det der sker, er at jeg registerer sproget fra den besøgende, det henter jeg ud og det vil jeg formattere til noget mere brugervenligt, så det står pænt i loggen.

Dertil har jeg dette (udpluk),

...

$lan_short = array("da", "en", "fr", "de", "ja", "zh", "ru", "fi", "no", "es", "sv", "cs", "nl", "ro", "is", "it", "el");
$lan_da = array("Dansk", "Engelsk", "Fransk", "Tysk", "Japansk", "Kinesisk", "Russisk", "Finsk", "Norsk", "Spansk", "Svensk", "Tjekkisk", "Hollandsk", "Rumænsk", "Islandsk", "Italiensk", "Græsk");

while ($data = mysql_fetch_array($query_log)) {

$number = ++$number;       
$ip = $data['ip'];
$dato = str_replace($month_eng, $month_da, $data['datoFormat']);
$ua = browser_check($data['browser']);
$sprog = str_replace($lan_short, $lan_da, substr(strtolower($data['sprog']), 0, 2));
$url = "http://www.webweaver.dk" . $data['url'];
$color = !$color;

...


Problemet er den str_replace på $sprog jeg kører. Jeg har et par arrays, hvor jeg vælger de værdier jeg vil fremvise. Og det har virket fint før hen, hvor jeg har brugt det i andre situationer, men nu opdagede jeg en mystisk fejl, efter jeg har tilføjet et par ekstra sprog.

Hvis en person bliver registreret som Engelsk, så udskriver den "EngGræsksk" og ved Russisk, skriver den RussIslandskk. Hvis det er Kinesisk, skriver den "KinSpanskIslandskk".

Der er en sammenhæng mellem det, da landekoderne er at finde i de sprognavne, som bliver smidt ind, hvor de ikke skal. F. eks. Kinesisk indeholder både es og is, og derfor smider den Spansk og Islandsk ind.

Men jeg forstår det stadig ikke. Hvorfor den blander de 2 arrays på den måde. Kan det være fordi at det ligger i en løkke og den checker på stringen igen og igen ...? Den burde jo skifte hver gang, da det kommer fra rækkerne i databasen. Udover det kan jeg slet ikke se sammenhængen i hvordan den kan smide noget "ekstra ind" eftersom den ikke checker på $sprog, men $data['sprog']..

Er det mig som har stirret mig helt blind på et eller andet, eller?

På forhånd tak.

Mvh. Webweaver
Avatar billede erikjacobsen Ekspert
13. februar 2011 - 15:17 #1
Hvis du bruger http://php.net/strtr i stedet for, sker det ikke. Den replacer ikke i det den allerede har replaced, hvad str_replace til gengæld gør.

Parametrene til strtr er lidt anderledes, men kig på eksemplerne.
Avatar billede webweaver Praktikant
13. februar 2011 - 17:19 #2
Mange tak for det Erik :-)

Det var jeg ikke klar over, så det er jo rart at vide til en anden gang. Det virker lige som det skal med strtr istedet.

Jeg ved at du ikke samler på point, men jeg spørger dig nu lige alligevel, for at være sikker, inden jeg selv smider et svar. Vil du have point? :)

Og fortsat god weekend.

Mvh. Lasse Jensen
Avatar billede erikjacobsen Ekspert
13. februar 2011 - 17:50 #3
:) Du lægger bare selv et svar, og accepterer det.
Avatar billede webweaver Praktikant
13. februar 2011 - 19:11 #4
Det gør jeg så...

Og endnu en gang, tak for hjælpen :)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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