Ola,

Als ik een string heb:

"foo-bar-baz-foobar"

En ik wil deze in 2'en splitsen op de eerste "-" van achteren, dus:

string1 = "foo-bar-baz-"
string2 = "foobar"

Hoe doe ik dit dan op de snelste manier? Kan ik daar alleen substr voor gebruiken, of zijn er nog alternatieven waarbij ik in 1x de string in 2'en kan "knippen"?
een regex?

<?php
$str = 'foo-bar-baz-foobar';
$b = preg_match('#^(.*)-([^-]+)$#', $str, $aM);
?>

$aM[1] zou dan foo-bar-baz moeten bevatten
en $aM[2] foobar


^ vanaf begin de string
(.*) vang alle tekens
- gevolgd door een -
([^-]+)$ : daarna tekens, niet zijnde een "-", totaan het einde.










[size=xsmall]Toevoeging op 17/03/2014 23:00:43:[/size]

weliswaar 1 regel, maar het is nog maar de vraag of dat "goedkoper" is dan strrpos() en substr()
Ivo, die character class is niet nodig aangezien de eerste repetition greedy is. De dash zal dus altijd al sowieso de laatste dsash van de string zijn. En dan is $ ook niet nodig, omdat de tweede repetition ook greedy is en dus alles totaan het eind zou matchen, om diezelfde rede is ^ ook overbodig. Als laatst zou ik + ipv * als repetitiom gebruiken.
Wouter, hoe zou het er dan in totaal uitzien? Ik ben daar niet goed in namelijk.
#(.*)-(.*)#
Ivo, ben je nou serieus, of heb je gewoon 2 tieten getekend???

:-/
/(.+)-(.+)/

Maar goed, ik zou het niet aanraden. Preg is voor dit soort simpele dingen niet gemaakt, waardoor hij veel trager zou zijn dan andere oplossingen.

Die met arrays zou ik ook niet gebruiken, arrays is nou niet php's beste punt en je hebt onnodig veel functie calls.

De string functies zijn hiervoor gemaakt, dus die zou ik lekker gaan gebruiken:
<?php
$rDashPos = strrpos($str, '-');
$str1 = substr($str, 0, $rDashPos);
$str2 = substr($str, $rDashPos + 1);
?>
als jij het zo ziet?

Die * kunnen ook + zijn trouwens: dat voorkomt dat er een - aan het begin of einde geaccepteerd wordt.
>> als jij het zo ziet?

't Was een grapje ;)

>> Die * kunnen ook + zijn trouwens: dat voorkomt dat er een - aan het begin of einde geaccepteerd wordt.

Ik zag het inderdaad al in het voorbeeldje van Wouter.

Ik zal het eens testen qua snelheid, maar ik denk dat Wouter gelijk heeft dat de string functies hier beter voor geschikt zijn.

Bedankt voor het meedenken allemaal :)
Ja, dat bedoel ik met "goedkoper".
Dat het in PHP 1 functie is, betekent niet dat er op de achtergrond heel wat stappen doorlopen worden.
Ik snap t... k zal het testen.. en waars. zullen het dan gewoon de sting functies worden.

Reageren