| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

05-09-2011, 11:56
|
|
mo78
Registrierter Benutzer
|
|
Registriert seit: Sep 2010
Beiträge: 88
|
|
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
|

05-09-2011, 12:04
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.308
|
|
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
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

05-09-2011, 12:05
|
|
Quetschi
PHP Expert
|
|
Registriert seit: Dec 2004
Beiträge: 2.759
|
|
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.
__________________
Drelingdo
Krabonse
Simmannamando
Geändert von Quetschi (05-09-2011 um 12:09 Uhr)
|

05-09-2011, 12:08
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

05-09-2011, 12:17
|
|
mo78
Registrierter Benutzer
|
|
Registriert seit: Sep 2010
Beiträge: 88
|
|
Dankeschön str_split ist das was ich gesucht habe.
mfg mo
|

05-09-2011, 12:47
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 680
|
|
Zitat:
Zitat von AmicaNoctis
|
... und zur Ergänzung:
PHP-Code:
preg_split('//u', $input);
Macht dasselbe, ist aber Unicode-tauglich (UTF-8).
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
|

05-09-2011, 13:34
|
 |
mermshaus
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 165
|
|
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
|

05-09-2011, 14:34
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von mermshaus
Das erzeugt allerdings bei mir einen Leereintrag ('') vorne und hinten im Array.
|
FYI: Das Flag PREG_SPLIT_NO_EMPTY existiert.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

05-09-2011, 21:44
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 680
|
|
Das kommt davon, wenn man einfach was hinschreibt, ohne zu testen. 
Ich hatte PREG_SPLIT_NO_EMPTY ursprünglich mit drin, war aber der Meinung, dass es hier nicht nötig ist ...
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
Geändert von fireweasel (05-09-2011 um 21:59 Uhr)
|

05-09-2011, 23:29
|
|
prego
PHP Senior
|
|
Registriert seit: May 2005
Ort: Hey ropp, hinne riwwer unn wirrer zuricke!
Beiträge: 1.602
|
|
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}] = ''; }
__________________
so long, der-p | 72dpi-club
Microsoft IE-Manager Dean Hachamovitch bei der Vorführung des IE7 Beta Preview 2 am 20.3.2006:
"Wir hatten mit IE ganz offensichtlich was verschlafen."
Geändert von prego (05-09-2011 um 23:32 Uhr)
|

05-09-2011, 23:55
|
 |
mermshaus
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 165
|
|
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.
Geändert von mermshaus (06-09-2011 um 00:02 Uhr)
|

06-09-2011, 09:13
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Zitat:
Zitat von prego
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.
|

06-09-2011, 12:01
|
|
prego
PHP Senior
|
|
Registriert seit: May 2005
Ort: Hey ropp, hinne riwwer unn wirrer zuricke!
Beiträge: 1.602
|
|
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?
__________________
so long, der-p | 72dpi-club
Microsoft IE-Manager Dean Hachamovitch bei der Vorführung des IE7 Beta Preview 2 am 20.3.2006:
"Wir hatten mit IE ganz offensichtlich was verschlafen."
|

06-09-2011, 12:07
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Zitat:
Zitat von prego
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
|

06-09-2011, 12:14
|
|
prego
PHP Senior
|
|
Registriert seit: May 2005
Ort: Hey ropp, hinne riwwer unn wirrer zuricke!
Beiträge: 1.602
|
|
Danke. Hatte da was im Hinterkopf, war mir aber nicht sicher.
__________________
so long, der-p | 72dpi-club
Microsoft IE-Manager Dean Hachamovitch bei der Vorführung des IE7 Beta Preview 2 am 20.3.2006:
"Wir hatten mit IE ganz offensichtlich was verschlafen."
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|