String nach gleichen Zeichen durchsuchen

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… :wink:

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…

:wink:

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 Like

.