Versio

Replace

Overzicht Reageren

Yorick17

yorick17

18/02/2009 13:50:00
Quote Anchor link
Ik heb het volgende stukje code
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?
function server_encode($string)
{

    $string = str_replace('a', 'x', $string);
    $string = str_replace('b', 'y', $string);
    //enz..
    $string = str_replace('x', '123', $string);
    $string = str_replace('y', '456', $string);
    return $string;        
}

?>


Hierbij is het de bedoeling dat een "a" word vervangen door een "x". Dus als ik $string vul met "abxy" wil ik dat er uit komt "xy123456". Maar wat nu het probleem is, is dat hij zichzelf gaat replacen, dus komt er uit "123456" want hij replacet de "xy" ook weer. Ik he al van alles geprobeerd maar ik kom er echt niet uit.
Weet iemand hoe dit moet?
 
PHP hulp

PHP hulp

25/05/2012 14:34:23
Gesponsorde koppelingen:
 
- SanThe -

- SanThe -

18/02/2009 14:00:00
Quote Anchor link
Volgorde?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?
function server_encode($string)
{

    $string = str_replace('x', '123', $string);
    $string = str_replace('y', '456', $string);
    $string = str_replace('a', 'x', $string);
    $string = str_replace('b', 'y', $string);
    //enz..
     return $string;        
}

?>

Zo doet ie het wél.
 
Yorick17

yorick17

18/02/2009 14:02:00
Quote Anchor link
Ja oke maar het gaat om het hele alfabet en de replace is niet "123" of "456" maar iets van "H8c" dus dat gaat niet.
 
- SanThe -

- SanThe -

18/02/2009 14:08:00
Quote Anchor link
Dan denk ik dat je dat niet gaat lukken met str_replace().
 
Karl Karl

Karl Karl

18/02/2009 14:09:00
Quote Anchor link
Ik denk dat je dan stap voor stap het moet doen, dus teken voor teken...
 
Yorick17

yorick17

18/02/2009 14:10:00
Quote Anchor link
Oke dat kan, ik sta open voor andere opties, dus moe zou het dan moeten volgens jou?
 
- SanThe -

- SanThe -

18/02/2009 14:12:00
Quote Anchor link
Karl schreef op 18.02.2009 14:09:
Ik denk dat je dan stap voor stap het moet doen, dus teken voor teken...

Dat werkt ook niet. Als je eerst de 'a' in een 'x' verandert dan kom je toch de 'x' weer tegen die er '123' van maakt.
 
Karl Karl

Karl Karl

18/02/2009 14:14:00
Quote Anchor link
SanThe schreef op 18.02.2009 14:12:
Karl schreef op 18.02.2009 14:09:
Ik denk dat je dan stap voor stap het moet doen, dus teken voor teken...

Dat werkt ook niet. Als je eerst de 'a' in een 'x' verandert dan kom je toch de 'x' weer tegen die er '123' van maakt.

Jawel, als je $sReplace hebt, dan doe je strlen en dan bijvoorbeeld als array door de string loopt, en dat weer opslaat in $sReplaced o.i.d.
 
Yorick17

yorick17

18/02/2009 14:15:00
Quote Anchor link
Dus iets met een for loop of zo? Hoe gaat dat er dan uit zien?
 
TJVB tvb

TJVB tvb

18/02/2009 14:15:00
Quote Anchor link
jawel, je moet de string per letter doorlopen, en per teken kijken wat het moet vervangen (switch statement)

Voorbeeld:
Ik haal hier steeds de voorste van de string af, gooi die in de switch (waar de tekens vervangen worden) en zet ze in een nieuwe string.
De default is om geen teken verloren te laten gaan.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$string
= 'Test abcxyz';
$nwString = '';
while($string != '')
{

    switch ($string[0])
    {
        case
'a':    $nwString .= 'x';    break;
        case
'b':    $nwString .= 'y';    break;
        case
'x':    $nwString .= '123';    break;
        case
'y':    $nwString .= '456';    break;
        default:
    $nwString .= $string[0];
    }

    $string = substr($string,1);
}

echo $nwString;
?>
Gewijzigd op 01/01/1970 01:00:00 door TJVB tvb
 
Yorick17

yorick17

18/02/2009 14:29:00
Quote Anchor link
Perfect het lijkt erop dat dit de oplossing is, ik ga er mee aan de slag!
 
- SanThe -

- SanThe -

18/02/2009 14:35:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);

function
server_encode($string)
{

    $return = '';
    $array = array('a'=>'x',
                    'b'=>'y',
                    'x'=>'123',
                    'y'=>'456');

    for($i=0; $i<strlen($string); $i++)
    {

        $return .= (isset($array[$string[$i]])) ? $array[$string[$i]] : $string[$i];
    }

    return $return;
}


echo server_encode('Test abcxyz');

?>
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
 
Yorick17

yorick17

18/02/2009 14:36:00
Quote Anchor link
ja ook bedankt deze onthoud ik en haal er uit wat ik kan gebruiken!
 
- SanThe -

- SanThe -

18/02/2009 14:41:00
Quote Anchor link
Ik heb hem nog iets ingekort.
Bij mijn scriptje hoef je alleen het array() aan te passen.
 
TJVB tvb

TJVB tvb

18/02/2009 14:49:00
Quote Anchor link
Niet aan gedacht, je hebt alleen met jou manier het probleem dat je zeer veel in het geheugen kunt hebben (ik heb ooit zoiets gebruikt voor zeer grote bestanden.daarom haal ik het teken ook meteen uit de string)
 



Overzicht Reageren