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"?
Kwestie van smaak, vind ik. Het kan met bijvoorbeeld strstr() en strrchr(), maar met substr() houdt je het overzichtelijk en logisch.

<?php
$in = 'foo-bar-baz-foobar';
$pos = strrpos($in, '-');
if ($pos !== false) {
    $pos += 1;
    $out1 = substr($in, 0, $pos);
    $out2 = substr($in, $pos, strlen($in));
}
?>
>> Het kan met bijvoorbeeld strstr() en strrchr()

Maar kan het niet in 1x, in 1 handeling bedoel ik? Is het niet mogelijk om aan te geven dat je de string wil splitten en dat het 1e deel in string 1 komt en het 2e deel in string2? Of eventueel in 2 array keys?
Alles kan in één handeling als je er zelf een functie van maakt ;-)
Hehe... lol...

Er bestaat dus niet een functie waarmee je kunt zeggen, knip een string in 2'en op positie x en stop deel 1 in string 1 en deel 2 in string 2 (of eventueel in 2 array keys)?
bedoel je iets als list() ?


<?php
$string = 'foo-bar-baz-foobar';
list($str1, $str2, $str3, $str4) = explode('-',$string);

echo $str1 // foo
. '<br />' . $str2 // bar
. '<br />' . $str3 // baz
. '<br />' . $str4; // foobar
?>
Dan komt explode() het dichtst in de buurt, maar moet je het geheel toch nog in wat extra functies nesten als je er één regel PHP van wilt maken. Persoonlijk vind ik het dan duidelijker — en vooral onderhoudsvriendelijker — om de stappen uit te schrijven.
@Michael... niet helemaal....

Dan zou ie alleen op de laatse slash moeten exploden in plaats van op alle slashes...
Eén expressie op één regel lukt linksom en rechtsom wel, maar wat is je definitie van "één handeling"?

<?php
$str = 'foo-bar-baz-foobar';
$arr = array(0 => substr($str, 0, strrpos($str, '-')) . '-', 1 => ltrim(strrchr($str, '-'), '-'));
?>
Het volgende is de kortste one-liner die ik me kan bedenken zonder zelf een functie te maken. Merk wel op dat het ten koste gaat van de leesbaarheid en je commentaar toe zou moeten voegen. Iets meer kleine simpele stapjes is over het algemeen beter te volgen (en daardoor te onderhouden) dan weinig stappen die niet goed te volgen zijn.
<?php
$str = 'foo-bar-baz-foobar';
$arr = array_map('strrev', array_reverse(explode('-', strrev($str), 2)));
?>

Edit: was array_map() vergeten
Holy crap :-/

Hahaha... wat een creatieve oplossingen. Hmmm... dan toch maar in stapjes. Ik vind het raar dat php geen "knip" functie heeft waarbij je kunt zeggen de eerste x karakters van string foo komen in string1 en de rest komt in string2. Lijkt me toch een handige functionaliteit.

Reageren