str_split() Alternative gesucht

Mik3e

Erfahrenes Mitglied
Guten Morgen!

Bin auf der Suche nach einer Alternative für str_split().
Siehe: http://at.php.net/manual/en/function.str-split.php
str_split ist leider erst ab 5.0 implementiert, ich arbeite auf 4.3...

Man könnte natürlich eine eigene Funktion schreiben oder den String mit Delimitern übergeben (und mit explode() auflösen). Das ist aber nicht wirklich elegant.

Gibt es eine Möglichkeit, eine bestehende Funktion dafür zu "zweckentrfemden"?

Danke & LG
Mike
 
Mal abgesehen davon, dass auf der von Dir verlinkten Seite bereits ein Beispiel mit [phpf]preg_split[/phpf] steht, kann man sich eine solche Funktion sehr schnell selber schreiben. Hier mal auf zwei verschiedene Arten:
PHP:
<pre>
<?
function strSplit($str,$len=1) {
    $tempStr="";
    $retArr=array();
    for ($i=0;$i<strlen($str);$i++) {
        $tempStr.=$str{$i};
        if (strlen($tempStr)==$len) {
            $retArr[]=$tempStr;
            $tempStr="";
        }
    }
    if (strlen($tempStr)>0) {
        $retArr[]=$tempStr;
    }
    return $retArr;
}

function strSplit2($str,$len=1) {
    $retArr=array();
    for ($i=0;$i<strlen($str);$i+=$len) {
        $retArr[]=substr($str,$i,$len);
    }
    return $retArr;
}

$testStr="Hello Friend";
print_r(strSplit($testStr));
echo "\n\n";
print_r(strSplit($testStr,3));
echo "\n\n";
print_r(strSplit($testStr,5));
echo "\n\n";
print_r(strSplit2($testStr));
echo "\n\n";
print_r(strSplit2($testStr,3));
echo "\n\n";
print_r(strSplit2($testStr,5));
echo "\n\n";
print_r(str_split($testStr));
echo "\n\n";
print_r(str_split($testStr,3));
echo "\n\n";
print_r(str_split($testStr,5));
echo "\n\n";

?>
</pre>
Eine eigene Funktion selber schreiben halte ich für eleganter, als eine Funktion zu zweckentfremden.

Gruß hpvw
 
Habe die preg Beispielfunktion nicht gesehen.. mein Fehler..
Eine eigene Funktion zu schreiben halte ich nicht für sinnvoll, das es aus Leistungsgründen besser und schneller ist, den String gleich mit Delimitern zu übergeben...

Dachte nur es gibt vielleicht irgendwelche ältere Funktionen...

Danke & LG
Mike

P.S.: Ich hoffe Du hast jetzt wieder Platz auf Deiner Platte :-)
 
Mik3e hat gesagt.:
Dachte nur es gibt vielleicht irgendwelche ältere Funktionen...
Meines Wissens nicht, die würde auch sicherlich in der "See also"-Liste stehen. Der von Dir angesprochene Workaround ließe sich mit [phpf]chunk_split[/phpf] und [phpf]explode[/phpf] machen. Allerdings sollte man vorher noch mit [phpf]strpos[/phpf] prüfen, ob der Delimiter nicht selbst im String vorkommt.
PHP:
explode("\0",chunk_split($testStr,3,"\0"))
OT:
Mik3e hat gesagt.:
P.S.: Ich hoffe Du hast jetzt wieder Platz auf Deiner Platte :-)
Ich habe die Datei (sieht sehr temporär aus) zwar gefunden, aber die ist trotz Neustart noch in Benutzung. Ich traue mich noch nicht so richtig, MySQL zu killen und die Datei einfach zu löschen, aber das wird schon noch.

Gruß hpvw

PS: Mit [ phpf ]Funktionsname ohne Klammern[ /phpf ] kannst Du direkt einen Link auf die PHP-Referenz erzeugen, ohne selber suchen zu müssen.
 
Ich vermute das der Server immer wieder von neuem beginnt, die Indizierung durchzuführen, sobald du ihn neu startest...
Versuch mal den Index von dem Attribut zu entfernen und dann den Dienst neu zu starten!?

Andere Frage:
Hast Du zufällig Erfahrung mit der GD Lib? Daher hat auch meine Frage zum Split() gerührt...

P.S.: Danke für den Tipp
 
Mik3e hat gesagt.:
Ich vermute das der Server immer wieder von neuem beginnt, die Indizierung durchzuführen, sobald du ihn neu startest...
Versuch mal den Index von dem Attribut zu entfernen und dann den Dienst neu zu starten!?
Nein versucht er nicht, zumindest ist MySQL laut Taskmanager ruhig und meine Festplatte gibt auch keinen Laut von sich. Der Index ist noch gar nicht auf dem Attribut drauf. In einer ruhigen Stunde werde ich den Dienst mal beenden und die Datei ganz vorsichtig in den Papierkorb legen. Wenn er dann wieder ordnungsgemäß startet hat es wohl geklappt.

Mik3e hat gesagt.:
Hast Du zufällig Erfahrung mit der GD Lib? Daher hat auch meine Frage zum Split() gerührt...
Du meinst die Grafikfunktionen? Ein klein wenig Erfahrung habe ich da, ist aber schon eine Weile her. Was hat das mit split zu tun? Wenn Du Buchstaben einzeln auf einem Bild ausgeben willst, würde ich einfach, wie oben in dem Beispiel, mit einer Schleife Zeichen für Zeichen durch den String gehen.

Gruß hpvw
 
hpvw hat gesagt.:
Was hat das mit split zu tun?

Es geht nicht um den Text, sondern um die Farben.
GDLIB erwartet die Farben als RGB oder zerlegtem HEX Code...
z.B:: 0x00,0x00,0xFF

Ich übergebe die Farbe allerdings (eh klar) als Standardformat (0000FF).
Dafür war das Splitten gedacht.

Habs jetzt so gelöst (der Farbcode wir als 00|00|FF übergeben):

PHP:
$hexcolor = explode('|',$_GET["color"]);

// Convert HEX values to DECIMAL
$bincolor[0] = hexdec("0x{$hexcolor[0]}");
$bincolor[1] = hexdec("0x{$hexcolor[1]}");
$bincolor[2] = hexdec("0x{$hexcolor[2]}");

Und das ist vermutlich schneller als eine eigene Funktion :)
 
Zurück