PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   explode() ohne delimiter (https://www.php-resource.de/forum/php-developer-forum/102139-explode-ohne-delimiter.html)

mo78 05-09-2011 11:56

explode() ohne delimiter
 
Hallo,
würde mal gern wissen ob es möglich ist einen String per explode() methode
in ein array zu wandeln.
So habe ich mir das gedacht

PHP-Code:

$string 'welt';
//soll werden
$array[0]['w'];
$array[1]['e'];
$array[2]['l'];
$array[3]['t']; 

mfg mo

Kropff 05-09-2011 12:04

PHP-Code:

$string 'welt';
for (
$i 0$i strlen($string); $i++)
{
  
$bla[] = $string[$i];
}
print_r($bla); 

Vielleicht gibt es noch was Besseres, aber das fällt mir im Moment nicht ein.

Peter

Quetschi 05-09-2011 12:05

PHP-Code:

$string 'welt';
//soll werden
echo $string[2]; 

Mal so als Beispiel - damit sollte dir klar werden, wie du dir das Array so bauen kannst, wie du es haben willst - wobei ich aber nicht verstehe, wieso man das in der Form haben will.

EDIT:
Das hier
PHP-Code:

$array[0]['w'];
$array[1]['e'];
$array[2]['l'];
$array[3]['t']; 

ist sowieso nicht lebensfähig.

AmicaNoctis 05-09-2011 12:08

Hallo,

PHP: str_split - Manual

Gruß,

Amica

mo78 05-09-2011 12:17

Dankeschön str_split ist das was ich gesucht habe.

mfg mo

fireweasel 05-09-2011 12:47

Zitat:

Zitat von AmicaNoctis (Beitrag 656449)

... und zur Ergänzung:

PHP-Code:

preg_split('//u'$input); 

Macht dasselbe, ist aber Unicode-tauglich (UTF-8).

mermshaus 05-09-2011 13:34

Das erzeugt allerdings bei mir einen Leereintrag ('') vorne und hinten im Array.

Vielleicht noch als Verfeinerung:

PHP-Code:

preg_split('/(?<!^)(?!$)/u'$string ); 

- Quelle: PHP: mb_split - Manual

wahsaga 05-09-2011 14:34

Zitat:

Zitat von mermshaus (Beitrag 656456)
Das erzeugt allerdings bei mir einen Leereintrag ('') vorne und hinten im Array.

FYI: Das Flag PREG_SPLIT_NO_EMPTY existiert.

fireweasel 05-09-2011 21:44

Das kommt davon, wenn man einfach was hinschreibt, ohne zu testen. :o
Ich hatte PREG_SPLIT_NO_EMPTY ursprünglich mit drin, war aber der Meinung, dass es hier nicht nötig ist ...

prego 05-09-2011 23:29

Noch einfacher:

PHP-Code:

$string 'welt';
echo 
$string{3}; // 't'

for($i 0$i strlen($string); $i++){
    echo 
$string{$i};


Und für das was du haben willst:
PHP-Code:

$arr = array();
for(
$i 0$i strlen($string); $i++){
    echo 
$string{$i};
    
$arr[][$string{$i}] = '';



mermshaus 05-09-2011 23:55

Das macht dir str_split wesentlich schneller (nicht getestet, aber die Variante, die möglichst viel in C-Code erledigt und möglichst wenige Funktionen aufruft, ist bei sowas meist schneller).

Wenn du es multibyte-sicher haben willst (etwa für UTF-8), musst du in deiner Schleife außerdem mb_strpos auspacken und dann bist du im FUBAR-Land. ;) mb_strpos merkt sich meines Wissens nicht, dass Character 46 an Offset 72 stand, die Funktion muss Character 47 erneut von Stringbeginn an abzählen. Ich gehe davon aus, dass der reguläre Ausdruck das schlauer hinbekommt, da die entsprechende Funktion nur einmal aufgerufen wird und deshalb nicht zwischen den Aufrufen den Kontext verliert.

h3ll 06-09-2011 09:13

Zitat:

Zitat von prego (Beitrag 656485)
Noch einfacher:

PHP-Code:

$string 'welt';
echo 
$string{3}; // 't'

for($i 0$i strlen($string); $i++){
    echo 
$string{$i};


Und für das was du haben willst:
PHP-Code:

$arr = array();
for(
$i 0$i strlen($string); $i++){
    echo 
$string{$i};
    
$arr[][$string{$i}] = '';



Und wenn man sich noch mehr anstrengt, kann man selbe Funktionalität sicher auch noch in 50 Programmzeilen verpacken. Aber was hat man davon?

Ich versuche meinen Code immer so performant und lesbar wie (sinnvoll) möglich zu halten. Den umgekehrten Ansatz (möglichst lang und unlesbar) hab ich noch gar nicht in Betracht gezogen. Vielleicht versuch ich das mal, wenn ich was neues ausprobieren will :)

Die Schreibweise mit den geschwungenen Klammern hat übrigens keine Zukunft.

prego 06-09-2011 12:01

Mit Multibyte habt ihr natürlich vollkommen recht. Mir ging es nur darum die Möglichkeit mit geschweiften Klammern aufzuzeigen.

Warum hat sie keine Zukunft? Source?

h3ll 06-09-2011 12:07

Zitat:

Zitat von prego (Beitrag 656512)
Mit Multibyte habt ihr natürlich vollkommen recht. Mir ging es nur darum die Möglichkeit mit geschweiften Klammern aufzuzeigen.

Warum hat sie keine Zukunft? Source?

Strings may also be accessed using braces, as in $str{42}, for the same purpose. However, this syntax is deprecated as of PHP 6. Use square brackets instead.

PHP: Strings - Manual

prego 06-09-2011 12:14

Danke. Hatte da was im Hinterkopf, war mir aber nicht sicher.


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:29 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG