[英]PHP: How replace a each character from an array with one in the another array
我想用另一個數組替換一個數組中的每個字符:
<?php
$str="a b c d e f g h i j ";
$pattern=array();
$pattern[0]="a";
$pattern[1]="b";
$pattern[2]="c";
$pattern[3]="d";
$pattern[4]="e";
$pattern[5]="f";
$pattern[6]="g";
$pattern[7]="h";
$pattern[8]="i";
$pattern[9]="j";
$replacement=array();
$replacement[0]="6a";
$replacement[1]="6e";
$replacement[2]="6i";
$replacement[3]="6o";
$replacement[4]="6u";
$replacement[5]="5a";
$replacement[6]="5e";
$replacement[7]="5i";
$replacement[8]="5o";
$replacement[9]="5u";
echo str_replace($pattern,$replacement,$str);?>
結果:
6a 66u 65o 6o 6u 5a 5e 55o 5o 5u
a b c d e f g h i j
'b' 'c' 'h'
與其他人發生沖突
也許嘗試用strtr
替換每個字符:
$str = "a b c d e f g h i j ";
$replacements = [
"a" => "6a",
"b" => "6e",
"c" => "6i",
"d" => "6o",
"e" => "6u",
"f" => "5a",
"g" => "5e",
"h" => "5i",
"i" => "5o",
"j" => "5u",
];
echo strtr($str, $replacements);
當將str_replace與arrays()用作$ search和$ replace參數時,該函數將針對$ subject字符串的每個字符評估$ search數組中的每個項目。 了解這一點很重要,因為給定字符的每個“循環”都會評估該點在該對象上正在處理的$ subject位置的內容。
這樣一來,該函數就可以一次更改該字符多次(針對$ search數組中的所有項目,該字符來自$ subject)。
一個簡單的示例將是以下代碼/輸出:
$str = "a b c";
$pattern = array("a","b","a");
$replacement = array("a1","b1","c1");
echo str_replace($pattern, $replacement, $str); // Output : c11 b1 c
該函數針對$ str中的每個字符對搜索數組中的所有項目執行“搜索”。 這是$ str(“ a”)中第一個字符的第一個“循環”:
首先找到“ a”,然后將其替換為“ a1”,然后查找“ b”,但找不到。 然后,它再次尋找“ a”,並用導致“ c11”的映射“ a” =>“ c1”替換上述替換(“ a” =>“ a1”)。
然后轉到$ str中的下一個字符。
您的例子
再次搜索$ str(“ b”)中的第二個字符時,將其替換為“ 6e”(這是$ str的新狀態),然后跟隨“循環”,在$ search數組,並替換為“ 6u”。 那時,您擁有“ 6a 66u”。 您可以推斷其余部分。
第一個“ a” =>“ 6a”之所以准確的原因是,搜索“循環”的第一次迭代后的$ str的新狀態(即“ 6a”)將與匹配項中的其他任何項都不匹配。搜索數組。
根據php文檔( php.net str_replace() ):
注意:更換訂單須知。 由於str_replace()從左到右替換,因此在進行多次替換時可能會替換先前插入的值。
此行為導致非常有趣/意外的結果,並且調試起來並不容易。
一些答案已經指向解決方案,我想介紹一下有關php的經驗行為的詳細信息。
希望對您有所幫助,讓我知道! 干杯
您需要更加精確。 您可以使用preg_replace
。 這里的正則表達式使用單詞邊界https://www.regular-expressions.info/wordboundaries.html 。
$str="a b c d e f g h i j ";
$pattern=array();
$pattern[0]="/\ba\b/";
$pattern[1]="/\bb\b/";
$pattern[2]="/\bc\b/";
$pattern[3]="/\bd\b/";
$pattern[4]="/\be\b/";
$pattern[5]="/\bf\b/";
$pattern[6]="/\bg\b/";
$pattern[7]="/\bh\b/";
$pattern[8]="/\bi\b/";
$pattern[9]="/\bj\b/";
$replacement=array();
$replacement[0]="6a";
$replacement[1]="6e";
$replacement[2]="6i";
$replacement[3]="6o";
$replacement[4]="6u";
$replacement[5]="5a";
$replacement[6]="5e";
$replacement[7]="5i";
$replacement[8]="5o";
$replacement[9]="5u";
echo preg_replace($pattern,$replacement,$str);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.