Hi!
Gibt es eine php-Funktion, die mir alle Stellen innerhalb eines Strings nennt, die einem bestimmten Zeichen entsprechen?
Ich habe einen String, der z.B. so aussieht:
„0010001001010001010001“
Nun will ich wissen, an welchen Stellen die Ziffer „1“ steht. Das Ergebnis wäre in diesem Fall ein Array mit 7 Elementen, die mir jeweils die Position der „1“ enthalten.
strpos und strrpos liefern ja nur das erste bzw. letzte Auftreten des Suchbegriffes. Ich will aber alle Positionen wissen. Gibt es sowas?
Grüße
Heinrich
meines Wissens gibt es das nicht…
Allerdings kannst Du es Dir auf verschiedene Arten selbst basteln…
Variante 1 - Rekursiv:
suche mit einer Funktion in dem String.
Findest Du das erste Zeichen, dann setze einen Zähler auf die jeweilige Stelle, speichere ein Array-Element und rufe die funktion mit dem substr auf, der den Rest enthält.
Auf die globalisierung der Variablen achten!
Variante 2 - Explode:
Erstelle mittels explode und Deinem suchstring ein Array.
Anschliessend lässt du das array durchlaufen und zählst die jeweilige array-element länge (beachte, dass Du je nach anzahl der durchläufe auch die länge des suchstrings addieren musst!) und speicherst in der Schleife ein weiteres Array, das die jeweiligen Fundstellen beinhaltet.
beides eigentlich nicht soooo schwer umzusetzen… 
Grüße
Munich
Variante 3 - Stringzerlegung
Eaehnlich Explode, aber mit strlen() und substr() … evtl etwas resourcenschonender.
Gruss
Stefan
Hallo Heinrich,
Ich habe einen String, der z.B. so aussieht:
„0010001001010001010001“
Nun will ich wissen, an welchen Stellen die Ziffer „1“ steht.
Das Ergebnis wäre in diesem Fall ein Array mit 7 Elementen,
die mir jeweils die Position der „1“ enthalten.
strpos und strrpos liefern ja nur das erste bzw. letzte
Auftreten des Suchbegriffes. Ich will aber alle Positionen
wissen. Gibt es sowas?
Müsste man selber basteln, ist in PHP etwas unschön.
(Da sieht man mal wieder … ok, ich sag nix)
Hmmm, in Perl wäre es ziemlich einfach:
my @array; # leeres array
# Array befüllen
() = '0010001001010001010001' =~ /1(?{push @array, pos})/g;
# Array ausgeben
print "@array\n";
Aber es sollte natürlich
auch in PHP durch extravagante Funktionskombination
„irgendwie“ gehen …
Ich versuchs mal,
Grüße
CMБ
geht problemlos mit der funktion preg_match_all
<?PHP $str = "0010001001010001010001";<br />preg\_match\_all("/1/",$str, $erg, PREG\_OFFSET\_CAPTURE);
foreach($erg[0] as $blub) {
echo $blub[1]."\n";
}
?\>
ergibt
2
6
9
11
15
17
21
LG
Phillip
Müsste man selber basteln, ist in PHP etwas unschön.
muss man nix zusammenbasteln --> preg_match_all
(Da sieht man mal wieder … ok, ich sag nix)
immer diese vorurteile…
LG
Phillip
Müsste man selber basteln, ist in PHP etwas unschön.
muss man nix zusammenbasteln --> preg_match_all
Uupss, stimmt genau!
(Da sieht man mal wieder … ok, ich sag nix)
immer diese vorurteile…

Nicht doch, ist ja alles perfekt …
Grüße
CMБ
Hallo,
geht problemlos mit der funktion preg_match_all
<?PHP :blush:str = "0010001001010001010001";
preg\_match\_all("/1/",$str, $erg, PREG\_OFFSET\_CAPTURE);
foreach($erg[0] as $blub) {
echo $blub[1]."\n";
}
Daraus kann man doch eine schöne Funktion für
den OP basteln, …
function charpositions($chrseq, $chr) {
preg\_match\_all("/$chr/", $chrseq, $match, PREG\_OFFSET\_CAPTURE);
return array\_map(create\_function('$pos','return $pos[1];'), $match[0]);
}
$string = '0010001001010001010001';
$posarray = charpositions( $string, '1' );
Grüße
CMБ
1 „Gefällt mir“