0

私はこれらのコードを持っています:

$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

私の問題を解決するのを手伝ってください...

4

2 に答える 2

3

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");

// 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); 
于 2012-11-19T07:36:20.900 に答える
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. 再び紐を結びます。
于 2012-11-19T07:27:38.613 に答える