Toon posts:

[PHP] Case insensitive?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een klein probleempje met het vergelijken van twee variabelen. Ik heb de volgende array:
PHP:
1
2
3
4
5
6
<?php

$array["NAME"] = "Coen";
$array["EMAIL"] = "coen@email.com";

?>
Nu kijk ik of een variabele al bestaat mbv de isset functie. Nu wil ik het volgende stukje code case insensitive maken.
PHP:
1
2
3
4
5
6
<?php

if(isset($array["NaMe"]))
  // Dit moet true worden...

?>
Iemand een idee hoe ik dit kan gaan aanpakken?

  • Apache
  • Registratie: Juli 2000
  • Laatst online: 31-08 13:50

Apache

amateur software devver

If it ain't broken it doesn't have enough features


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

strtoupper misschien?

Today's subliminal thought is:


Verwijderd

Topicstarter
Sorry ik had mijn vraag niet helemaal juist geformuleerd:
PHP:
1
2
3
4
5
6
7
8
<?php

$var["NaMe"] = "Coen";

if(isset($var["nAmE"]))
  // Dit moest eigenlijk ook true zijn :).

?>
Nu is het al iets lastiger ;).

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:49
Dan zul je toch eerste je keys in een standaardvorm moeten brengen (een nieuwe, goed-formatteerde array maken dus) en vervolgens op die standaardvorm zoeken.

Verwijderd

Topicstarter
Tja, zover ging mijn brein ook wel, maar dat is echt vreselijk traag. Het is voor een template engine en als iets belangrijk is dan is het wel de snelheid. Dus helaas zal dit niet tot de mogelijkheden behoren :'(.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:49
Hoe komen die waarden dan in die array? Kun je ze er niet beter gelijk handig instoppen?

Verwijderd

Topicstarter
De waarden worden bij het 'assignen' van de template variabelen toegekend. Dit kan dus met elke hoofdletter geschreven worden als gewenst. De template zelf kan je uiteraard ook zelf maken dus normaal gesproken maakt het niets uit als je geen typfouten maakt.

Ik kan wel een tweede array aanmaken met de "handige" keys, maar ook dan moet ik een tweede check maken wat toch het meeste tijd inneemt.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:49
Maar je assigned die template variabelen zelf; kun je dan niet gelijk ipv. $whatever[$key]=$val doen: $whatever[tolower($key)]=$val ?

Verwijderd

Topicstarter
Ja, maar wanneer iemand instelt dat hij het niet case insensitive wil dan heb je alleen de strtoupper() waarden. Maar ik denk dat dit zonder al te veel tijdverlies niet haalbaar is.

  • MiezeL
  • Registratie: Augustus 2002
  • Laatst online: 08-04 08:40
niet case insensitive ...LOLLLLLL, case sensitive heet dit dus:P
jij hebt zeker ook een echt nephorloge:P
emm daar heb je gelijk in. Dan is alleen klein en niet te verleiden wat het WAS. is het niet mogelijk alleen ff uit te lezen wat je wil dmv in een var zetten met strtoupper(), zodat alleen de vergelijking niet case sensitive is....

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:49
Sorry, dat ik dit topic weer omhoogschop, maar ik kwam toevallig de functie array-change-key-case tegen, die ik zelf nog niet kende. Als je inderdaad van plan bent om de case van de array aan te passen zodat je er efficient in kunt zoeken, dan is het waarschijnlijk praktisch om het met deze built-in functie te doen.

Verwijderd

Mocht de mogelijkheid hierboven niet werken kun je eventueel met een foreach je keys resetten. Zoiets dus

PHP:
1
2
3
4
5
foreach ($array as $key => $value)
{
   $key = strtoupper($key);
   $array[$key] = $value;
}

[ Voor 0% gewijzigd door Verwijderd op 18-09-2002 11:50 . Reden: Oewap! ]


Verwijderd

Verwijderd schreef op 18 september 2002 @ 11:50:
Mocht de mogelijkheid hierboven niet werken kun je eventueel met een foreach je keys resetten. Zoiets dus

PHP:
1
2
3
4
5
foreach ($array as $key => $value)
{
   $key = strtoupper($key);
   $array[$key] = $value;
}
Het 'probleem' is dan wel dat je met een heleboel 'dubbele' variabelen komt te zitten, wat natuurlijk niet zo netjes is. Je hebt dan bv. $array['NaMe'] en $array['NAME']. De volgende oplossing lijkt mij beter:
PHP:
1
2
3
$array = array_flip($array);  //draai alle keys en values om
array_change_key_case($array, CASE_UPPER);  //maak alle values uppercase
$array = array_flip($array);   //draai alle values en keys om

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:49
Verwijderd schreef op 18 september 2002 @ 15:04:
Het 'probleem' is dan wel dat je met een heleboel 'dubbele' variabelen komt te zitten, wat natuurlijk niet zo netjes is. Je hebt dan bv. $array['NaMe'] en $array['NAME'].
Je kan natuurlijk net zo goed in een nieuwe array die values setten; dat maakt voor het voorbeeld niet zo veel uit.
De volgende oplossing lijkt mij beter:
PHP:
1
2
3
$array = array_flip($array);  //draai alle keys en values om
array_change_key_case($array, CASE_UPPER);  //maak alle values uppercase
$array = array_flip($array);   //draai alle values en keys om
Uhm, het gaat toch juist om de keys? Dan moet je 'm toch niet eerst flippen, lijkt me? Nu pas je feitelijk alle values aan. het gebruik van array_flip niet echt geschikt voor deze toepassing (ik heb het namelijk ook overwogen in combinatie met een array_map) aangezien je alle elementen kwijtraakt die toevallig dezelfde waarde hebben.

Als ik de array ( aantal => 3, fiets => 3 ) heb, dan is het natuurlijk niet de bedoeling dat vanwege de case conversion er alleen maar ( FIETS => 3) overblijft.

Maar als gezegd; alleen array_change_key_case is goed genoeg.

Verwijderd

Verwijderd schreef op 18 september 2002 @ 15:04:
[...]


Het 'probleem' is dan wel dat je met een heleboel 'dubbele' variabelen komt te zitten, wat natuurlijk niet zo netjes is. Je hebt dan bv. $array['NaMe'] en $array['NAME']. De volgende oplossing lijkt mij beter:
Klopt.
PHP:
1
2
3
4
5
6
foreach ($array as $key => $value)
{
   $newkey = strtoupper($key);
   $array[$newkey] = $value;
   unset($array[$key]);
}

Klaar.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:49
Verwijderd schreef op 18 september 2002 @ 15:25:
PHP:
1
2
3
4
5
6
foreach ($array as $key => $value)
{
   $newkey = strtoupper($key);
   $array[$newkey] = $value;
   unset($array[$key]);
}

Klaar.
Weer fout. ;)
Wanneer de keys toevallig al in uppercase waren (of geen uppercasebare karakters bevat) unset je mooi de enige versie van de key. Je moet dus ofwel een nieuwe array opbouwen, ofwel eerst de oude key unsetten (nadat je de inhoud hebt bewaard) ofwel controleren of de key die je unset wel verschilt van de ge-uppercase-te variant.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Waarom hebben mensen altijd de neiging allerlei "leuke" constructies te verzinnen als het juiste antwoord allang gegeven is?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

offtopic:
yay! mijn eerste dubbelpost in heel mijn posthistory :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Nielsz
  • Registratie: Maart 2001
  • Niet online
En we zullen 'm onthouden hoor drm!

Verwijderd

Soultaker:
Uhm, het gaat toch juist om de keys? Dan moet je 'm toch niet eerst flippen, lijkt me?

Oops, niet goed gelezen :o. Dan wordt het idd zoiets:
PHP:
1
array_change_key_case($array, CASE_UPPER);  //maak alle keys uppercase

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:49
Verwijderd schreef op 18 september 2002 @ 17:57:
Oops, niet goed gelezen :o. Dan wordt het idd zoiets:
PHP:
1
array_change_key_case($array, CASE_UPPER);  //maak alle keys uppercase
Fijn dat je het daar zes uur later ook mee eens bent. ;)
Pagina: 1