php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 14.05.2010, 20:00  
Neuer Benutzer
 
Registriert seit: 14.05.2010
Beiträge: 2
PHP-Kenntnisse:
Anfänger
Freddy befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Problem mit String ersetzen

Hallo, ich bin neu in diesem Forum und habe gleich schon eine Frage. Ich möchte in einem String wie z.B. "aaxyaxyzaaxyzxaa" nach dem String aa suchen und durch einen festen String (ab) ersetzen.
Dies wäre auch relativ einfach, wenn ich nicht maximal einmal aa ersetzt haben wollte.
Als Ausgabestring hätte ich gerne ein array("abxyaxyzaaxyzxaa", "aaxyaxyzabxyzxaa", "aaxyaxyzaaxyzxab")

Leider habe ich entweder nur Funktionen gefunden, welche alle aa durch ab ersetzen oder nur das erste(preg_replace mit Limit Angabe von 1).

Ich hoffe es kann mir einer weiterhelfen.

MFG
Freddy ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 14.05.2010, 20:32  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.269
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

PHP-Code:
<?php
    
function getSingleReplaceCombinations($replace$with$inHaystack)
    {
        
$splits  explode($replace$inHaystack);
        
$result  = array();
        for (
$i 1$ix count($splits); $i $ix; ++$i) {
            
$previous array_slice($splits0$i);
            
$next     array_slice($splits$i);
            
            
$combine  array_pop($previous) . $with array_shift($next);
            
$result[] = implode($replacearray_merge($previous, array($combine), $next));
        }
        return 
$result;
    }
    
    
var_dump(getSingleReplaceCombinations("1""_""101111xx"));
?>
Code:
array(5) {
  [0]=>
  string(8) "_01111xx"
  [1]=>
  string(8) "10_111xx"
  [2]=>
  string(8) "101_11xx"
  [3]=>
  string(8) "1011_1xx"
  [4]=>
  string(8) "10111_xx"
}
Geht bestimmt auch einfacher.
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline  
Alt 14.05.2010, 20:40  
Erfahrener Benutzer
 
Benutzerbild von fireweasel
 
Registriert seit: 20.03.2010
Beiträge: 474
PHP-Kenntnisse:
Fortgeschritten
fireweasel ist ein Lichtblickfireweasel ist ein Lichtblickfireweasel ist ein Lichtblickfireweasel ist ein Lichtblickfireweasel ist ein Lichtblick
fireweasel eine Nachricht über ICQ schicken fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken fireweasel eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von Freddy Beitrag anzeigen
...
Ich möchte in einem String wie z.B. "aaxyaxyzaaxyzxaa" nach dem String aa suchen und durch einen festen String (ab) ersetzen.
Dies wäre auch relativ einfach, wenn ich nicht maximal einmal aa ersetzt haben wollte.
Als Ausgabestring hätte ich gerne ein array("abxyaxyzaaxyzxaa", "aaxyaxyzabxyzxaa", "aaxyaxyzaaxyzxab")
PHP-Code:
/// return array of strings
function fw_replace_special(
    
$needle,
    
$replace_with,
    
$haystack
) {
    
$pcre '/'preg_quote($needle'/') .'/';
    
$replaced = array ();
    
$off 0;
    while (
preg_match($pcre$haystack$hitsPREG_OFFSET_CAPTURE$off)) {
        
$found_off =  $hits[0][1];
        
$found_length strlen($hits[0][0]);
        
$replaced[] = substr_replace(
            
$haystack
            
$replace_with
            
$found_off
            
$found_length
        
);
        
$off $found_off $found_length;
    }
    return 
$replaced;
}

// test
$haystack 'aaxyaxyzaaxyzxaa';
$needle 'aa';
$replace_with '**';

$replaced fw_replace_special($needle$replace_with$haystack);
var_dump($replaced); 

*edit*
Mist, zu spät ...

Geändert von fireweasel (14.05.2010 um 20:52 Uhr).
fireweasel ist offline  
Alt 14.05.2010, 21:05  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.269
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

lol fire Aber finds immer wieder schön zu sehen wie verschiedene Lösungen zum selben Ergebnis führen können.

PS: Ich hatte auch überlegt mit einer while(mb_strpos(, $pos))) Schleife zu arbeiten, vermutlich sogar das schnellste.

Edit: Ha, hab ichs doch noch geschafft mit meinem mb_strpos()-Skript:
PHP-Code:
// Chriz I
function getSingleReplaceCombinations1($replace$with$inHaystack)
{
    
$splits  explode($replace$inHaystack);
    
$result  = array();
    for (
$i 1$ix count($splits); $i $ix; ++$i) {
        
$previous array_slice($splits0$i);
        
$next     array_slice($splits$i);
        
        
$combine  array_pop($previous) . $with array_shift($next);
        
$result[] = implode($replacearray_merge($previous, array($combine), $next));
    }
    return 
$result;
}

// fireweasel
function getSingleReplaceCombinations2($needle$replace_with$haystack) {
    
$pcre '/'preg_quote($needle'/') .'/';
    
$replaced = array ();
    
$off 0;
    while (
preg_match($pcre$haystack$hitsPREG_OFFSET_CAPTURE$off)) {
        
$found_off =  $hits[0][1];
        
$found_length strlen($hits[0][0]);
        
$replaced[] = substr_replace($haystack$replace_with$found_off$found_length);
        
$off $found_off $found_length;
    }
    return 
$replaced;
}

// Chriz II
function getSingleReplaceCombinations3($replace$with$inHaystack)
{
    
$offset 0;
    
$length mb_strlen($replace);
    
$result = array();
    while ((
$found mb_strpos($inHaystack$replace$offset)) !== false) {
        
$result[] = mb_substr($inHaystack0$found) . $with mb_substr($inHaystack$found $length);
        
$offset   $found $length;
    }
    return 
$result;
}


$expectedResult = array("_baaaaab""ab_aaaab""aba_aaab""abaa_aab""abaaa_ab""abaaaa_b");

Debug::microtime("Chriz I (Start)");
for (
$i 0$i 100000; ++$i) {
    
assert(getSingleReplaceCombinations1("a""_""abaaaaab") === $expectedResult);
}
Debug::microtime("Chriz I (Ende)");

Debug::microtime("fireweasel (Start)");
for (
$i 0$i 100000; ++$i) {
    
assert(getSingleReplaceCombinations2("a""_""abaaaaab") === $expectedResult);
}
Debug::microtime("fireweasel (Ende)");

Debug::microtime("Chriz II");
for (
$i 0$i 100000; ++$i) {
    
assert(getSingleReplaceCombinations3("a""_""abaaaaab") === $expectedResult);
}
Debug::microtime("Chriz II (Ende)");
Debug::stop(); 
Code:
DEBUG BACKTRACE

[ 1] E:\Projekte\antiphp.local\public\index.php:74
     Debug::stop()

DEBUG MEMORY 597,000 of 786,432

DEBUG RUNTIME

+   0.000000s
               Chriz I (Start)    > E:\Projekte\antiphp.local\public\index.php:57
+   4.604352s
               Chriz I (Ende)     > E:\Projekte\antiphp.local\public\index.php:61
+   0.000022s
               fireweasel (Start) > E:\Projekte\antiphp.local\public\index.php:63
+   3.237261s
               fireweasel (Ende)  > E:\Projekte\antiphp.local\public\index.php:67
+   0.000020s
               Chriz II           > E:\Projekte\antiphp.local\public\index.php:69
+   2.783521s
               Chriz II (Ende)    > E:\Projekte\antiphp.local\public\index.php:73
+   0.000102s
               DEBUG STOP         > E:\Projekte\antiphp.local\library\classes\Debug.php:178
=  10.625278s

DEBUG STOP
Mein erstes Skript für 100.000 kleine Ersetzungen + Zusicherung mit 4,6 Sekunden, dein Skript 3,23 und mein zweiter Anlauf 2,78 Sekunden
__________________
"Nuschel ich?" - "Was?"

Geändert von Chriz (14.05.2010 um 21:19 Uhr).
Chriz ist offline  
Alt 15.05.2010, 00:17  
Erfahrener Benutzer
 
Benutzerbild von fireweasel
 
Registriert seit: 20.03.2010
Beiträge: 474
PHP-Kenntnisse:
Fortgeschritten
fireweasel ist ein Lichtblickfireweasel ist ein Lichtblickfireweasel ist ein Lichtblickfireweasel ist ein Lichtblickfireweasel ist ein Lichtblick
fireweasel eine Nachricht über ICQ schicken fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken fireweasel eine Nachricht über Skype™ schicken
Standard

Ich war in der Zwischenzeit mit was anderem beschäftigt, und hatte vergessen, den Reload-Button zu drücken, bevor ich meinen Post absetzte. Passiert mir öfters ...

Jetzt solltest du (der Fairness halber) aber noch eine Variante mit strpos() bauen und meine Version auch als preg_match() mit '/u' (für UTF- testen ...
fireweasel ist offline  
Alt 15.05.2010, 16:07  
Neuer Benutzer
 
Registriert seit: 14.05.2010
Beiträge: 2
PHP-Kenntnisse:
Anfänger
Freddy befindet sich auf einem aufstrebenden Ast
Standard

Vielen Dank für eure Hilfe. Habe nicht mit einer so ausführlichen Antwort gerechnet.

MFG
Freddy
Freddy ist offline  
 


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
String ersetzen mattla93 PHP Tipps 2009 5 12.12.2009 21:20
String suchen und ersetzen XXcD PHP Tipps 2008 14 02.05.2008 17:32
String Problem! Knuff PHP Tipps 2008 21 18.03.2008 14:45
Event abfangen Ambience JavaScript, Ajax und mehr 4 30.08.2007 14:36
String mit Parameter ersetzen GSJLink PHP Tipps 2007 3 13.01.2007 14:24
String durchsuchen und ersetzen unabhängig von Groß / KLein PHP Tipps 2006 2 09.07.2006 23:29
String, Zeichen ersetzen mit Ausnahmen! I-Spy PHP Tipps 2006 3 26.05.2006 11:31
String ersetzen Benshee PHP Tipps 2006 4 02.04.2006 21:43
String durchsuchen - Spam Problem mit Gästebuch havok PHP Tipps 2006 23 15.03.2006 18:44
Problem mit der preg_replace - Ersetzen einer Zeichenkette reimondo PHP Tipps 2006 10 07.02.2006 22:36
String durchsuchen und Zeichenkette ersetzen PHP Tipps 2005-2 2 10.07.2005 22:48
String ersetzen kai_lamers PHP Tipps 2005-2 2 11.06.2005 14:52
Problem Checkboxen - string mit Zahlen die gecheckten setzen Cyberbob_at_tot PHP Tipps 2005-2 5 11.06.2005 11:36
String Problem mgoertz PHP-Fortgeschrittene 1 18.11.2004 14:27
Problem mit String, wenn er per Mail versandt wird. PHP-Fortgeschrittene 2 10.11.2004 13:48

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
string ersetzen, php string ersetzen, http://www.php.de/php-einsteiger/67948-erledigt-problem-mit-string-ersetzen.html, string ersetzen php, string ersetzten, \php text in string ersetzen ü\, php string ersetzen von bis, ajax javascript email text ersetzen anti spam, php string einmal ersetzen, html string ersetzen, php string replace, php text ersetzen problem, php string nur einmal ersetzen, html zeichenfolge ersetzen, string to string ersetzen, php string replace ersetzt nicht, php string replace mit ausnahme, php ersetze erstes string, von bis in string ersetzen php, php string \' ersetzen

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:01 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