spatie herkennen
Wat is de makkelijkste manier om te weten of er een spatie in een string staat? Via strpos?
strpos($string, ' ');
strpos($string, ' ');
Gesponsorde koppelingen:
Joost, waarom denk je dat jouw methode beter is dan bijvoorbeeld strpos? Is dit sneller?
Is wellicht niet sneller maar geeft wel meer mogelijkheden (telt gelijk aantal keer voorkomen).
Ik hoef echt alleen maar te weten óf er een spatie in zit. Verder niks. Het gaat er niet om hoeveel spaties het zijn. Dat kan ik dus doen met strpos of preg_match. Maar is het een beter / sneller dan het ander of maakt dat niks uit? Weet iemand dat toevallig?
Ik gok dat strpos sneller is, want meestal raad men af om trage reguliere expressies te gebruiken als het niet nodig is.
Oké, thanks :)
En uit de resultaten van een test met PHPbench komt iets anders dan hier wordt verwacht. Ik heb 4 verschillende functies getest en de resultaten na 1000x herhalen van de code zijn:
[footnote]
De resultaten veranderen een beetje na een paar keer refreshen van de pagina, maar substr_count blijkt altijd het langzaamst en preg_match met een spatie of een whitespace character maakt niet heel veel uit en het verschil tussen preg_match en strpos is ook klein en schommelt ook.
| 131% | substr_count('helloWorld', ' ') | time: 186 µs |
| 120% | preg_match('/\s/', 'helloWorld') | time: 170 µs |
| 115% | preg_match('/ /', 'helloWorld') | time: 162 µs |
| 100% | strpos('helloWorld') | time: 142 µs |
[footnote]
De resultaten veranderen een beetje na een paar keer refreshen van de pagina, maar substr_count blijkt altijd het langzaamst en preg_match met een spatie of een whitespace character maakt niet heel veel uit en het verschil tussen preg_match en strpos is ook klein en schommelt ook.
Gewijzigd op 22/02/2012 19:30:38 door Wouter J
Euh... strpos is dan toch wel het snelst? Of zie ik het nu verkeerd?
Ohja, sorry. Ik dacht dat jullie het over substr_count hadden, had jou 'code' in het begin niet gezien (misschien handig om code tags te gebruiken zodat dat meteen opvalt... ;))
Ah oke, maakt niet uit ;)
Ik weet nu in ieder geval dat ik de beste oplossing heb :)
Ik weet nu in ieder geval dat ik de beste oplossing heb :)
Het is niet helemaal wat je wilt, maar voor het geval dat je wil weten of de string alleen maar uit spaties bestaat kan je de functie ctype_space gebruiken.
okeej... denk niet dat ik het ooit nodig zal hebben :)
dan lijkt me trim() een betere optie...
dan lijkt me trim() een betere optie...
Als je echt goed volgens de functies van PHP wil programmeren moet je trim niet in een controle gebruiken. (vind ik) De functie trim verwijderd alle spaties voor en achter een string. Wil je controleren of een string alleen uit spaties bestaat kan je dus het beste ctype_space gebruiken.
Maar goed dat is mijn mening :-) Ik weet niet hoe andere mensen hier over denken?
Edit:
Je moet wel even goed opletten hoe ctype_space de spaties ziet. Het volgende voorbeeld 'matcht' niet.
Hij matcht alleen het volgende voorbeeld:
De functie trim ziet de volgende chars ook als 'spaties':
- " " Normale spatie
- "\t" Is een tab (6 spaties volgens mij).
- "\n" Is een nieuwe regel
- "\r" Is een return
- "\0" Een NULL byte
- "\x0B" Een verticale tab.
Daar moet je per controle rekening mee houden.
Maar goed dat is mijn mening :-) Ik weet niet hoe andere mensen hier over denken?
Edit:
Je moet wel even goed opletten hoe ctype_space de spaties ziet. Het volgende voorbeeld 'matcht' niet.
Hij matcht alleen het volgende voorbeeld:
De functie trim ziet de volgende chars ook als 'spaties':
- " " Normale spatie
- "\t" Is een tab (6 spaties volgens mij).
- "\n" Is een nieuwe regel
- "\r" Is een return
- "\0" Een NULL byte
- "\x0B" Een verticale tab.
Daar moet je per controle rekening mee houden.
Gewijzigd op 23/02/2012 13:38:00 door Niels Kieviet
"Wil je controleren of een functie alleen uit spaties bestaat..."
Ik neem aan dat je een string bedoelt.
Ik zou zelf in 1e instantie denken aan:
maar wat jij zegt is miscchien wat netter.
Ik neem aan dat je een string bedoelt.
Ik zou zelf in 1e instantie denken aan:
maar wat jij zegt is miscchien wat netter.
Je hebt gelijk, dat bedoelde ik inderdaad :-)
Ja dat zou je denken, maar ik zat even op php.net te kijken en kwam toen die functie tegen. Zie ook mijn edit voor meer informatie over de controles van trim en ctype_space.
Ja dat zou je denken, maar ik zat even op php.net te kijken en kwam toen die functie tegen. Zie ook mijn edit voor meer informatie over de controles van trim en ctype_space.
Ah ja, oké. Misschien komt het nog eens van pas :)
Precies, ik wilde je het niet onthouden :-)
hehe, thanks ;)



