2012-11-19 66 views
0

我有这些代码:PHP str_replace函数怪异的结果

$alphabet = array("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"); 

$first = array("Captain","Dirty","Squidlips","Bowman","Buccaneer","Two Toes","Sharkbait","Old","Peg Leg","Fluffbucket","Scallywag","Bucko","Dead man","Matey","Jolly","Stinky","Bloody","Miss","Mad","Red","Lady","Bretheren","Rapscallion","Landlubber","Wench","Freebooter"); 

ImageTTFText($image, 45, 0, 0, $y-intval("30"), imageColorAllocate($image,255,255,255), "pirate-font.ttf", str_replace($alphabet,$first,"bad")); 

请帮我解决这个奇怪的问题... 我觉得有什么不对,他们我的编码,但我不知道哪个是哪个...

通过上面的代码...

据称,输出必须是Dirty Captain Bowman ,但奇怪的是,它输出错误的结果...

检查:http://alylores.x10.mx/106/pic.php

请帮我解决我的问题......

回答

3

不幸的是,从左到右的功能str_replace会导致这种情况。所以这里是一个选择。

这里是下面的代码的一个例子:Example.

$alphabet = array("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"); 

$first = array("Captain","Dirty","Squidlips","Bowman","Buccaneer","Two Toes","Sharkbait","Old","Peg Leg","Fluffbucket","Scallywag","Bucko","Dead man","Matey","Jolly","Stinky","Bloody","Miss","Mad","Red","Lady","Bretheren","Rapscallion","Landlubber","Wench","Freebooter"); 

// split bad into an array, each letter being its own value. 
$input = str_split('bad'); 

// Alphabet become the keys, $first are the values 
$c = array_combine($alphabet, $first); 

$output = ''; 
foreach ($input as $letter) 
{ 
    $output .= $c[$letter] . ' '; 
} 

$final_word = trim($output); 

ImageTTFText($image, 45, 0, 0, $y-intval("30"), imageColorAllocate($image,255,255,255), "pirate-font.ttf", $final_word); 
+0

thnx先生...我发现它的工作... XD –

+1

好交易。干杯。 – wesside

2
<?php 
// Order of replacement 
$str  = "Line 1\nLine 2\rLine 3\r\nLine 4\n"; 
$order = array("\r\n", "\n", "\r"); 
$replace = '<br />'; 

// Processes \r\n's first so they aren't converted twice. 
$newstr = str_replace($order, $replace, $str); 

// Outputs F because A is replaced with B, then B is replaced with C, and so on... 
// Finally E is replaced with F, because of left to right replacements. 
$search = array('A', 'B', 'C', 'D', 'E'); 
$replace = array('B', 'C', 'D', 'E', 'F'); 
$subject = 'A'; 
echo str_replace($search, $replace, $subject); 

// Outputs: apearpearle pear 
// For the same reason mentioned above 
$letters = array('a', 'p'); 
$fruit = array('apple', 'pear'); 
$text = 'a p'; 
$output = str_replace($letters, $fruit, $text); 
echo $output; 
?> 

来源:http://php.net/manual/en/function.str-replace.php

伪代码:

  1. 分割字符串数组(HTTP:// php.net/manual/en/function.str-split.php拆分长度= 1)
  2. 替换每个数组中的每个值尝试
  3. 再次将字符串放在一起。
+1

另外有一个[大“注意”的文档中的块与本](http://bg2.php.net/manual/en /function.str-replace.php#refsect1-function.str-replace-notes)。 – lanzz

+0

你能修改我上面的代码吗? Y_Y –

+0

@JulianPaoloDayag这不是一个解决方案,只是一个解释。它从php.net站点粘贴。 – wesside