Versio

spatie herkennen

Overzicht Reageren

Ozzie PHP

Ozzie PHP

22/02/2012 13:56:10
Quote Anchor link
Wat is de makkelijkste manier om te weten of er een spatie in een string staat? Via strpos?

strpos($string, ' ');
 
PHP hulp

PHP hulp

17/05/2012 13:18:34
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Joost van der Meijden

Joost van der Meijden

22/02/2012 14:03:16
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if (preg_match("/ /", $string)) {
        echo 'Match!';
    }

?>


Denk dat dat de beste methode is ... :)
Gewijzigd op 22/02/2012 14:03:52 door Joost van der Meijden
 
Ozzie PHP

Ozzie PHP

22/02/2012 14:17:22
Quote Anchor link
Joost, waarom denk je dat jouw methode beter is dan bijvoorbeeld strpos? Is dit sneller?
 
Eddy Erkelens

Eddy Erkelens

22/02/2012 15:05:21
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
if(substr_count($string, " ") > 0)
 {

 // ...
 }
?>


Is wellicht niet sneller maar geeft wel meer mogelijkheden (telt gelijk aantal keer voorkomen).
 
Ozzie PHP

Ozzie PHP

22/02/2012 15:10:03
Quote Anchor link
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?
 
Mathias B

Mathias B

22/02/2012 15:14:19
Quote Anchor link
Ik gok dat strpos sneller is, want meestal raad men af om trage reguliere expressies te gebruiken als het niet nodig is.
 
Ozzie PHP

Ozzie PHP

22/02/2012 15:19:27
Quote Anchor link
Oké, thanks :)
 
Wouter J

Wouter J

22/02/2012 19:14:46
Quote Anchor link
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:
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
 
Ozzie PHP

Ozzie PHP

22/02/2012 19:24:10
Quote Anchor link
Euh... strpos is dan toch wel het snelst? Of zie ik het nu verkeerd?
 
Wouter J

Wouter J

22/02/2012 19:25:41
Quote Anchor link
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... ;))
 
Ozzie PHP

Ozzie PHP

22/02/2012 19:44:52
Quote Anchor link
Ah oke, maakt niet uit ;)
Ik weet nu in ieder geval dat ik de beste oplossing heb :)
 
Niels Kieviet
Beheerder

Niels Kieviet

23/02/2012 13:17:13
Quote Anchor link
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.
 
Ozzie PHP

Ozzie PHP

23/02/2012 13:19:55
Quote Anchor link
okeej... denk niet dat ik het ooit nodig zal hebben :)
dan lijkt me trim() een betere optie...
 
Niels Kieviet
Beheerder

Niels Kieviet

23/02/2012 13:23:07
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$string
= '\r';
if (true === ctype_space($string)) {}
?>


Hij matcht alleen het volgende voorbeeld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$string
= ' '; // of $string = '            ';
if (true === ctype_space($string)) {}
?>


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
 
Ozzie PHP

Ozzie PHP

23/02/2012 13:28:52
Quote Anchor link
"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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if (trim($string) != '') {

}

?>


maar wat jij zegt is miscchien wat netter.
 
Niels Kieviet
Beheerder

Niels Kieviet

23/02/2012 13:31:05
Quote Anchor link
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.
 
Ozzie PHP

Ozzie PHP

23/02/2012 13:48:16
Quote Anchor link
Ah ja, oké. Misschien komt het nog eens van pas :)
 
Niels Kieviet
Beheerder

Niels Kieviet

23/02/2012 13:50:48
Quote Anchor link
Precies, ik wilde je het niet onthouden :-)
 
Ozzie PHP

Ozzie PHP

23/02/2012 14:13:36
Quote Anchor link
hehe, thanks ;)
 



Overzicht Reageren

Get Adobe Flash player