php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 22.02.2005, 15:09  
Gast
 
Beiträge: n/a
Standard alle Positionen eines Strings innerhalb eines Strings finden

Hallo,

gibt es irgendeine Möglichkeit alle Positionen eines Teilstrings innerhalb eines Strings zu finden oder hat das vielleicht schonmal jemand gebraucht?

Mit PHP-Standard-Funktionen kann man ja scheinbar nur die Anzahl ermitteln oder immer das jeweils erste oder letzte Element.

Da ich aber nicht alle einheitlich tauschen kann, muss ich die Positionen kennen, damit ich anschließend individuell tauschen kann.

Also Bsp:

string: "123 oder 123 und 123 sowie 123"

teilstring: "123"

Der erste Teilstring 123 soll beispielsweise durch "abc"
der Zweite durch "def"
und der Dritte erneut durch "abc" ersetzt werden

Hat da jemand ne Idee, wie ich das machen kann?
,danke
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 22.02.2005, 15:28  
Erfahrener Benutzer
 
Registriert seit: 14.01.2004
Beiträge: 2.543
fantast
fantast eine Nachricht über ICQ schicken
Standard

PHP-Code:
<?php
while (strpos(...) !== 0) {
  
str_replace(...);
}
?>
__________________
Was ist validität?
fantast ist offline  
Alt 22.02.2005, 15:50  
Gast
 
Beiträge: n/a
Standard

ohh,

Fehler meinerseits,
hatte grad überlegt, ob es so einfach ist, aber:

das beispiel war leider nicht ganz vollständig, denn

machmal bleibt 123 auch 123 und dann klappt das gerade nicht mehr.
Ich hatte auch überlegt, ob ich ein Platzhalter einführe. Der hat aber das Problem, dass ich nicht vorher weiß, welche Zeichenfolge in keinem Fall verwendet bzw. in jedem Fall ersetzt werden muss.
Zudem gibt es einen zweiten Schritt, sodass das dann nicht mehr funktionieren würde.

Exakter sieht es in etwa so aus:

string: "wert=123 oder wert=123 und wert=123 sowie wert=123"

teilstring: "wert"

ersetzt soll es dann z.B. so aussehen

"wert=abc oder wert=123 und wert=def sowie wert=567"

und wie gesagt in einem späteren Schritt unter Umständen weitere Änderungen

ich will also alle Positionsnummern von wert ermitteln und dann hinter dem '=' ersetzen

->da ich nicht alle werte ersetzen muss wäre etwas schick wie eine Liste

gefundener wert | position
1 0
2 14
3 27
4 42

mfg
 
Alt 22.02.2005, 15:53  
Erfahrener Benutzer
 
Registriert seit: 29.10.2004
Beiträge: 1.781
derHund
Standard

preg_match_all
PREG_OFFSET_CAPTURE
__________________
derHund ist offline  
Alt 22.02.2005, 15:56  
Erfahrener Benutzer
 
Registriert seit: 14.01.2004
Beiträge: 2.543
fantast
fantast eine Nachricht über ICQ schicken
Standard

PHP-Code:
<?php
$offset 
0;
$results = array();

while ((
$pos strpos($data$search$offset)) !== false) {
  
$results[] = $pos;
  
$offset $pos;
}
?>
damit bekommst du zumindest schon mal alle fundstellen in ein array. wie du die werte dazu noch bekommst, ueberlass ich dir.

PHP-Code:
<?php
# ginge das als einzeiler ?
for ($offset 0$results = array(); ($results[] = $pos strpos($data$search$offset)) !== false$offset $pos);

# oder sogar ?
for ($offset 0; ($results[] = $offset strpos($data$search$offset)) !== false; );
?>
__________________
Was ist validität?
fantast ist offline  
Alt 22.02.2005, 16:04  
Gast
 
Beiträge: n/a
Standard

vielen Dank,

werd ich gleich mal probieren gehen bzw. durch den Schnee waten
(sitze grad im PC-Pool)

mfg
,noi
 
Alt 23.02.2005, 15:51  
Gast
 
Beiträge: n/a
Standard

nur mal ne kleine Rückmeldung:

es hat sich der Fehlerteufel eingeschlichen
$position muss jeweils um 1 erhöht werden, da sonst bei jedem Durchlauf die selbe Stelle bzw. das selbe Auftreten des Teilstrings gefunden wird

Dadurch gibts also kleine Änderungen am Code:

Code:
<?php
$offset = 0;
$results = array();

while (($pos = strpos($data, $search, $offset)) !== false) {
  $results[] = $pos;
  $offset = $pos+1;  // in dieser Zeile +1
}
?>
Bei den (schicken) kurzen Varianten natürlich auch:

Code:
<?php
# ginge das als einzeiler ?
for ($offset = 0, $results = array(); ($results[] = $pos = strpos($data, $search, $offset)) !== false; $offset = $pos+1);
Die ganz kurze Variante klappt dann leider nicht mehr so, allerdings könnte trotzdem
eine Verkürzung erreicht werden, indem (wie bereits erfolgt) die Initialisierung gespart wird:
Code:
# oder sogar ?
for ($offset = 0; ($results[] = $pos = strpos($data, $search, $offset)) !== false; $offset = $pos+1);
?>
Vielen Dank nochmal

mfg
,noi
 
Alt 23.02.2005, 19:39  
Erfahrener Benutzer
 
Registriert seit: 14.01.2004
Beiträge: 2.543
fantast
fantast eine Nachricht über ICQ schicken
Standard

ich waer ja dafuer ich versuch mal den zum laufen zu kreigen
PHP-Code:
<?php
for ($offset 0; ($pos++ = $results[] = strpos($data$search$offset)) !== false; );
?>
__________________
Was ist validität?
fantast ist offline  
Alt 23.02.2005, 20:21  
Gast
 
Beiträge: n/a
Standard Re: alle Positionen eines Strings innerhalb eines Strings fi

Zitat:
Zitat von noi
gibt es irgendeine Möglichkeit alle Positionen eines Teilstrings innerhalb eines Strings zu finden oder hat das vielleicht schonmal jemand gebraucht?
Na klar.
http://de2.php.net/preg_match_all

Zitat:
Der erste Teilstring 123 soll beispielsweise durch "abc"
der Zweite durch "def"
und der Dritte erneut durch "abc" ersetzt werden
Mit
http://de2.php.net/foreach
durchs Ergebnisarray von preg_match_all() walken und mit
http://de2.php.net/manual/de/function.preg-replace.php
bzw.
http://de2.php.net/manual/de/functio...e-callback.php
die Ersetzung vornehmen.
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
TAB innerhlab eines Strings. GELight PHP Tipps 2006 8 10.07.2006 21:16
Mit if Abfrage innerhalb eines strings einen Ausdruck suchen tinchen PHP Tipps 2006 4 11.04.2006 10:18
[Erledigt] Zugriff auf eine Klasse innerhalb einer Funktion -&amp;amp;gt; Fehle PHP-Fortgeschrittene 23 05.02.2006 13:02
[Erledigt] Auswertung von Funktionen innerhalb von Strings PHP Tipps 2006 5 30.01.2006 14:03
Excel Sheet innerhalb einer HTML Seite anzeigen PHP Tipps 2005-2 4 20.09.2005 13:32
doppelte Werte / Strings einer Spalte nur einmal ausgeben... Datenbanken 2 29.07.2005 12:10
Problem mit Zahlen innerhalb von strpos() PHP Tipps 2005-2 6 25.07.2005 06:40
Mausposition innerhalb eines Elementes Buhmann HTML, Usability und Barrierefreiheit 1 20.01.2005 16:58
strings sortieren aircrash PHP Tipps 2004-2 5 23.12.2004 16:57
[Erledigt] Object innerhalb einer XML Parser Funktion deklarieren PHP-Fortgeschrittene 0 10.12.2004 14:40
metrische länge eines strings Sclot PHP-Fortgeschrittene 3 08.12.2004 13:54
[Erledigt] Strings saeubern PHP Tipps 2004 2 12.10.2004 15:52
[Erledigt] Query, der Daten innerhalb DB zwischen Tabellen verschiebt Datenbanken 6 18.09.2004 14:38
Referenzen (lies Pointer) innerhalb mehrdimensionaler Arrays PHP-Fortgeschrittene 2 17.09.2004 14:00
Daten innerhalb einer Tab. mit insert duplizieren/kopieren Datenbanken 4 15.09.2004 15:12

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php string finden position, php string position finden, php position string finden, php string finden, mit php alle positionen in string finden, http://www.php.de/php-tipps-2005/18365-alle-positionen-eines-strings-innerhalb-eines-strings-finden.html, php position in string finden, php alle positionen eines strings, php alle zeichenketten in string finden, php string suchen position, php teilstring suchen, php teilstring finden, strpos alle vorkommen, php alle vorkommen position, excel letztes vorkommen teilstring, teilstring innerhalb eines strings suchen, php string finden an position, string innerhalb eines strings suchen php, drupal hook_nodeapi view wird mehrmals ausgeführt, php mehrere string positionen finden

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




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.