下でIは、配列の値を持つ出力を比較するコードを持っており、唯一のアレイ内の単語と動作を終了:は、配列の値により、変数の値を交換するが、条件
最初のコード(単なる例)
$myVar = 'essa pizza é muito gostosa, que prato de bom sabor';
$myWords=array(
array('sabor','gosto','delicia'),
array('saborosa','gostosa','deliciosa'),
);
foreach($myWords as $words){
shuffle($words); // randomize the subarray
// pipe-together the words and return just one match
if(preg_match('/\K\b(?:'.implode('|',$words).')\b/',$myVar,$out)){
// generate "replace_pair" from matched word and a random remaining subarray word
// replace and preserve the new sentence
$myVar=strtr($myVar,[$out[0]=>current(array_diff($words,$out))]);
}
}
echo $myVar;
私の質問:
// wrong output: $myVar = "minha irmã alanné é not aquela blnode, elere é a bom plperito";
$myVar = "my sister alannis is not that blonde, here is a good place";
$myWords=array(array("is","é"),
array("on","no"),
array("that","aquela"),
//array("blonde","loira"),
//array("not","não"),
array("sister","irmã"),
array("my","minha"),
//array("nothing","nada"),
array("myth","mito"),
array("he","ele"),
array("good","bom"),
array("ace","perito"),
// array("here","aqui"), //if [here] it does not exist, it is not to do replacement from the line he=ele = "elere" non-existent word
);
$replacements = array_combine(array_column($myWords,0),array_column($myWords,1));
$myVar = strtr($myVar,$replacements);
echo $myVar;
// expected output: minha irmã alannis é not aquela blonde, here é a bom place
// avoid replace words slice!
:私は常に値を交換するために、(私は常に1から列0を変更、私は置換の精度が欲しい、ランドをしたくない)ランド/シャッフルのためではない第二のコードを、持っています期待出力:minha IRMA alanniséaquela金髪ではない、ここでは、BOMの場所
// avoid replace words slice! always check if the word exists in the array before making the substitution.
alanné、blnode、éelereつのワードは、書き込み存在単語ないこと
:、plperito
それは出力が配列myWordsに存在する実際の単語のであろうかどうかを調べ、これはのような入力ミス回避しますエラー。 2番目のコードではどうしますか?
要するに、交換は完全な単語/キー、既存の単語で行わなければなりません。キーワードのスライスを使用して奇妙な何かを作成しないでください!
ありがとうmickmackusa ...もう一度ありがとう:-) –