login  Naam:   Wachtwoord: 
Registreer je!
 Forum

str_replace(); doet zijn werk verkeerd? (Opgelost)

Offline BigBug - 25/10/2008 14:09
Avatar van BigBugPHP expert
  1. <?php
  2. $var = 'poepchinees';
  3.  
  4. $origineel = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
  5. $vervanging = array('O', 'Y', 'J', 'o', 'z', 'V', 'b', 'N', 'H', 'S', 'R', 'i', 'n', 'y', 'F', 'Q', 'Z', 6, 'T', 'd', 'B', 'P', 'l', 'C', 4, 'c', 'f', 'a', 0, 5, 'E', 9, 'W', 'I', 'u', 'x', 'w', 8, 'g', 'r', 'p', 'M', 't', 3, 'K', 'k', 'A', 'U', 'D', 'e', 'v', 'm', 'G', 1, 'X', 'q', 'h', 'j', 'L', 7, 's', 2);
  6.  
  7. $var1 = str_replace($origineel, $vervanging, $var);
  8. $var2 = str_replace($vervanging, $origineel, $var1);
  9.  
  10. echo "Var 1: " . $var1 . "<br>Var2: " . $var2;
  11. ?>


Het hele idee wat hierboven staat maakt uit van een veel groter en complexer systeem, maar ik heb dit stukje er even uitgevist om mijn probleem aan te geven. Bij var1 wordt $var omgezet via str_replace.. Bij var2 is het de bedoeling dat dit precies andersom gebeurt... Alleen dit is niet het geval, en dit zou wel zo moeten wezen 

Het resultaat van het runnen van het bovenstaande script:
Var: poepchinees
Var 1: c4Dcg6qgDD0
Var2: EoMECUTCMMY

Var2 zou dus ook weer poepchinees moeten zijn... Maar dit is niet het geval.. En ik zou niet weten waarom? Weet iemand een oplossing of ziet iemand een fout?

Bij voorbaat dank...

8 antwoorden

Gesponsorde links
Offline Rik - 25/10/2008 14:29 (laatste wijziging 25/10/2008 14:31)
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Misschien heeft dat er mee te maken dat str_replace letter voor letter werkt. Dit:
  1. $var = 'cba';
  2. $a1 = array('a', 'b', 'c');
  3. $a2 = array('b', 'c', 'a');
  4. echo str_replace($a1, $a2, $var);
geeft ook aaa in plaats van acb.

Edit:
Voor de zekerheid zou iemand in de sourcecode van php moeten kijken, maar het lijkt er op dat hij zo doet:
cba --> a wordt b --> cbb --> b wordt c --> ccc --> c wordt a --> aaa.
Offline Kr4nKz1n - 25/10/2008 14:30 (laatste wijziging 25/10/2008 14:31)
Avatar van Kr4nKz1n Onbekend
BigBug schreef:
Het resultaat van het runnen van het bovenstaande script:
Var: poepchinees
Var 1: c4Dcg6qgDD0
Var2: EoMECUTCMMY
Over discriminatie gesproken.

Geen eens meer zin om jou te helpen.
Offline BigBug - 25/10/2008 14:34
Avatar van BigBug PHP expert @ hiervoven .. right  Is daadwerkelijk discriminerend bedoeld 

@Bouke, ik denk dat ik de oplossing gevonden heb 
http://nl.php.n....php#84943

Ik laat 'm nog even onopgelost staan terwijl ik dit ga proberen 
Offline Kr4nKz1n - 25/10/2008 14:42
Avatar van Kr4nKz1n Onbekend Het gaat er niet om hoe je het bedoeld, het gaat erom dat je het zegt zonder reden.

Gebruik foo of bar, ipv je discriminerende uitingen.
Offline Rik - 25/10/2008 14:43
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Kr4nKz1n schreef:
[..quote..]Over discriminatie gesproken.

Geen eens meer zin om jou te helpen.
Waarom overdrijven sommige mensen zo snel... Het is maar een voorbeeld toch?  

@BigBug
Ja, letter voor letter vervangen zal dan helpen! Best wel slecht dat php dat niet vanzelf doet.  
Offline BigBug - 25/10/2008 14:57 (laatste wijziging 25/10/2008 14:58)
Avatar van BigBug PHP expert Nou ik heb het speciaal voor Krankzin even aangepast.

Ik heb dat deel van PHP gebruikt om het effe te proberen met letter voor letter verplaatsen, alleen ik krijg heele gekke resultaten..

  1. <?php
  2. $search = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
  3. $replace = array('O', 'Y', 'J', 'o', 'z', 'V', 'b', 'N', 'H', 'S', 'R', 'i', 'n', 'y', 'F', 'Q', 'Z', 6, 'T', 'd', 'B', 'P', 'l', 'C', 4, 'c', 'f', 'a', 0, 5, 'E', 9, 'W', 'I', 'u', 'x', 'w', 8, 'g', 'r', 'p', 'M', 't', 3, 'K', 'k', 'A', 'U', 'D', 'e', 'v', 'm', 'G', 1, 'X', 'q', 'h', 'j', 'L', 7, 's', 2);
  4. $var = 'rewrite';
  5.  
  6. $newArr = str_split($var); //split $var into an array of characters. For php4, you'll have to create the str_split() function.
  7. $var = '';
  8. foreach ($newArr as $nchar)
  9. {
  10. $i = array_keys($replace, $nchar); //get the key(s) in the $search array for the character we're replacing. (we assume it occurs only once.) Returns an array of length, 1.
  11. $var .= $replace[$i[0]]; //find the character in the $replace array that matches the position of the one we're replacing, and add it to $newstring.
  12. }
  13. echo $var . "<br><br>";
  14.  
  15. $newArr2 = str_split($var); //split $var into an array of characters. For php4, you'll have to create the str_split() function.
  16. $var = '';
  17. foreach ($newArr2 as $nchar)
  18. {
  19. $i = array_keys($replace, $nchar); //get the key(s) in the $search array for the character we're replacing. (we assume it occurs only once.) Returns an array of length, 1.
  20. $var .= $replace[$i[0]]; //find the character in the $replace array that matches the position of the one we're replacing, and add it to $newstring.
  21. }
  22. echo $var;
  23. ?>

Dit bovenstaand geeft mij hetvolgende schitterende resultaat ( )

0000i00

0000i00

 .........

Edit Oja dat laatste deel is bull, omdat ik nog was vergeten de replace termen te vervangen...

Moet nu effe weg, ben straks terug
Offline Rik - 25/10/2008 15:15
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Zo dan?  
  1. $search = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
  2. $replace = array('O', 'Y', 'J', 'o', 'z', 'V', 'b', 'N', 'H', 'S', 'R', 'i', 'n', 'y', 'F', 'Q', 'Z', 6, 'T', 'd', 'B', 'P', 'l', 'C', 4, 'c', 'f', 'a', 0, 5, 'E', 9, 'W', 'I', 'u', 'x', 'w', 8, 'g', 'r', 'p', 'M', 't', 3, 'K', 'k', 'A', 'U', 'D', 'e', 'v', 'm', 'G', 1, 'X', 'q', 'h', 'j', 'L', 7, 's', 2);
  3.  
  4. $var = 'rewrite';
  5. $var1 = str_replacer($search, $replace, $var);
  6. $var2 = str_replacer($replace, $search, $var1);
  7. printf('$var: %s<br/>$var1: %s<br />$var2: %s', $var, $var1, $var2);
  8.  
  9.  
  10. function str_replacer($search, $replace, $subject) {
  11. $combined = array_combine($search, $replace);
  12. foreach (str_split($subject) as $index => $char) {
  13. $subject[$index] = isset($combined[$char]) ? $combined[$char] : $char;
  14. }
  15. return $subject;
  16. }
Offline BigBug - 25/10/2008 17:19
Avatar van BigBug PHP expert Die werkt wel ja !! 

Dankuwel (a)
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.251s