比如这段代码
<?php
$c="0123456789";
$a=array("/0/","/1/","/2/","/3/","/4/","/5/","/6/","/7/","/8/","/9/");
$b=array("4","6","8","3","5","7","1","9","0","2");
$c = preg_replace($a,$b,$c);
echo $c;
?>:我想要的是两个数组里一对一的替换,即结果是4683571902,而这段代码输出的是2103221202,貌似是多次重复替换了,将$b里面的换成英文字母就可以做到一一对应下面这段代码的写法输出结果无法一一对应,应该如何修改?希望大家能帮帮忙,不胜感激!$keyword=array(
"1" => "6",
"2" => "8",
"3" => "3",
"4" => "5",
"5" => "7",
"6" => "1",
"7" => "9",
"8" => "0",
"9" => "2",
"0" => "4"
);function replace_keyword($string,$t=1){
global $keyword;
$keyword_key = array_keys($keyword);
$keyword_value = array_values($keyword);
if($t==1){
$string = str_replace($keyword_key,$keyword_value,$string);
}elseif($t==2){
$string = str_replace($keyword_value,$keyword_key,$string);
}
return $string;
}
<?php
$c="0123456789";
$a=array("/0/","/1/","/2/","/3/","/4/","/5/","/6/","/7/","/8/","/9/");
$b=array("4","6","8","3","5","7","1","9","0","2");
$c = preg_replace($a,$b,$c);
echo $c;
?>:我想要的是两个数组里一对一的替换,即结果是4683571902,而这段代码输出的是2103221202,貌似是多次重复替换了,将$b里面的换成英文字母就可以做到一一对应下面这段代码的写法输出结果无法一一对应,应该如何修改?希望大家能帮帮忙,不胜感激!$keyword=array(
"1" => "6",
"2" => "8",
"3" => "3",
"4" => "5",
"5" => "7",
"6" => "1",
"7" => "9",
"8" => "0",
"9" => "2",
"0" => "4"
);function replace_keyword($string,$t=1){
global $keyword;
$keyword_key = array_keys($keyword);
$keyword_value = array_values($keyword);
if($t==1){
$string = str_replace($keyword_key,$keyword_value,$string);
}elseif($t==2){
$string = str_replace($keyword_value,$keyword_key,$string);
}
return $string;
}
$str = "123123";
$a = array(1, 2, 3);
$b = array('A', 'B', 'C');echo str_replace($a, $b, $str);
$keyword=array(
"1" => "6",
"2" => "8",
"3" => "3",
"4" => "5",
"5" => "7",
"6" => "1",
"7" => "9",
"8" => "0",
"9" => "2",
"0" => "4"
);
$string = "12313";
function wordReplace($matches) {
return $GLOBALS['keyword'][$matches[0][0]];
}
echo preg_replace_callback("|(\d)|", "wordReplace", $string);
//要不加个回调函数吧
$result = str_replace($keyword_value,$keyword_key,$string);
$string = $result;
它会按替换和被替换的数组的元素顺序替换。一个笨办法,自己写个函数,遍历的方式,替换一个后,通过strpos记录下该次被替换的所有元素的字符位置,并记录在一个数组中。每次替换即验证当次要替换元素的位置是否包含或交叉于记录的这个数组中,存在则不替换该位置的元素,不存在则替换。
$b=array("4","6","8","3","5","7","1","9","0","2");
echo strtr($c, $b); //4683571902
谢谢!
这个单独运行OK,不过用在主贴里面的第二段代码,也不行,我是直接将str_replace换成strtr的,不知对不对?
"1" => "6",
"2" => "8",
"3" => "3",
"4" => "5",
"5" => "7",
"6" => "1",
"7" => "9",
"8" => "0",
"9" => "2",
"0" => "4"
);function replace_keyword($string,$t=1){
global $keyword;
$keyword_key = array_keys($keyword);$keyword_value = array_values($keyword);if($t==1){
$string = strtr($keyword_key, $string);
}elseif($t==2){
$string = strtr(array_flip($keyword),$string);
}
return $string;
}
$keyword=array(
"1" => "m",
"2" => "b",
"3" => "m",
"4" => "d",
"5" => "e",
"6" => "j",
"7" => "g",
"8" => "h",
"9" => "i",
"0" => "k"
);function replace_keyword($string,$t=1){
global $keyword;
$keyword_key = array_keys($keyword);
$keyword_value = array_values($keyword);
if($t==1){
$string = str_replace($keyword_key,$keyword_value,$string);
}elseif($t==2){
$string = str_replace($keyword_value,$keyword_key,$string);
}
return $string;
}不知道应该怎么改呢?麻烦xuzuning再帮帮忙,非常感谢!
"1" => "m",
"2" => "b",
"3" => "n",
"4" => "d",
"5" => "e",
"6" => "j",
"7" => "g",
"8" => "h",
"9" => "i",
"0" => "k"
);function replace_keyword($string,$t=1){
global $keyword;
$keyword_key = array_keys($keyword);
$keyword_value = array_values($keyword);
if($t==1){
$string = str_replace($keyword_key,$keyword_value,$string);
}elseif($t==2){
$string = str_replace($keyword_value,$keyword_key,$string);
}
return $string;
}这个用字母代替数字是无错的
"1" => "6",
"2" => "8",
"3" => "3",
"4" => "5",
"5" => "7",
"6" => "1",
"7" => "9",
"8" => "0",
"9" => "2",
"0" => "4"
);function replace_keyword($string,$t=1){
global $keyword;
if($t==1){
$string = strtr($string, $keyword);
}elseif($t==2){
$string = strtr($string, array_flip($keyword));
}
return $string;
}
echo replace_keyword("0123456789");//4683571902