Php in_数组在相同字符上返回false,单字符串匹配
在这个函数中,即使我从Php in_数组在相同字符上返回false,单字符串匹配,php,Php,在这个函数中,即使我从$special数组中输入字符,In_array()每次都返回false,如果我对我试图解析的常规文本var_dump(),输出将只是bool(false),没有马赫数,即使我将字符从源复制粘贴到数组。此外,我正在寻找使这个字符替换工作正常的方法。正如我提到的stru-split无法处理多字节字符串。不相信我 无论如何,这里有一个可以拆分多字节字符串的版本: function make_ascii($str) { $special = array('ľ','š','
$special
数组中输入字符,In_array()
每次都返回false,如果我对我试图解析的常规文本var_dump()
,输出将只是bool(false)
,没有马赫数,即使我将字符从源复制粘贴到数组。此外,我正在寻找使这个字符替换工作正常的方法。正如我提到的stru-split
无法处理多字节字符串。不相信我
无论如何,这里有一个可以拆分多字节字符串的版本:
function make_ascii($str) {
$special = array('ľ','š','č','ť','ž','ý','á','í','é','ú','ä','ô','ň','ě');
$ascii = array('l','s','c','t','z','y','a','i','e','u','a','o','n','e');
$str = str_split($str);
foreach ($str as $k => $c) {
if(ctype_upper($c)) {
$u = true;
$c = strtolower($c);
} else {
$u = false;
}
if(in_array($c, $special, false)) {
$c = $ascii[array_search($c, $special)];
}
if($u) {
$c = strtoupper($c);
}
$str[$k] = $c;
}
return join($str);
}
拉拉黄
由于
str_split
不适用于多字节,因此必须使用mb_
执行多字节字符串操作
function make_ascii($str) {
$special = array('ľ','š','č','ť','ž','ý','á','í','é','ú','ä','ô','ň','ě');
$ascii = array('l','s','c','t','z','y','a','i','e','u','a','o','n','e');
$str = preg_split("//u",$str);
foreach ($str as $k => $c) {
if(ctype_upper($c)) {
$u = true;
$c = mb_strtolower($c);
} else {
$u = false;
}
if(in_array($c, $special, false)) {
$c = $ascii[array_search($c, $special)];
}
if($u) {
$c = mb_strtoupper($c);
}
$str[$k] = $c;
}
return join($str);
}
$str = "ľaľa ýellow";
print_r(make_ascii($str));
如果大写字母出现问题,您必须将函数更改为mb\u strotop
和mb\u strotlower
。另外ctype\u upper
将不起作用,因此也将其更改
function make_ascii($str) {
//return $str;
$special = array('ľ','š','č','ť','ž','ý','á','í','é','ú','ä','ô','ň','ě');
$ascii = array('l','s','c','t','z','y','a','i','e','u','a','o','n','e');
$str = array_map(function ($i) use ($str) {
return mb_substr($str, $i, 1);
}, range(0, mb_strlen($str) -1));
foreach ($str as $k => $c) {
if(ctype_upper($c)) {
$u = true;
$c = strtolower($c);
} else {
$u = false;
}
// print_r($c);
if(in_array($c, $special)) {
$c = $ascii[array_search($c, $special)];
}
if($u) {
$c = strtoupper($c);
}
$str[$k] = $c;
}
return join($str);
}
var_dump(make_ascii('áé'));
您在第一行有一个返回值?
str\u split
在多字节字符串上无法正常工作。请删除此return$str代码>从第一行开始抱歉,返回值只是为了让整个脚本正常工作。array\seach
也是错误的听起来不错,演示正在工作,但不知怎么的,我的文本在数组中没有通过,这总是会出错。旁注:(我也意识到了我的答案),strtolower
也不会工作。我们可能需要检查您的字符串,如果您有不同的字符串,请给出该字符串
function make_ascii($str) {
//return $str;
$special = array('ľ','š','č','ť','ž','ý','á','í','é','ú','ä','ô','ň','ě');
$ascii = array('l','s','c','t','z','y','a','i','e','u','a','o','n','e');
$str = array_map(function ($i) use ($str) {
return mb_substr($str, $i, 1);
}, range(0, mb_strlen($str) -1));
foreach ($str as $k => $c) {
if( mb_strtoupper($c, "UTF-8") == $c) {
$u = true;
$c = mb_strtolower($c);
} else {
$u = false;
}
// print_r($c);
if(in_array($c, $special)) {
$c = $ascii[array_search($c, $special)];
}
if($u) {
$c = mb_strtoupper($c);
}
$str[$k] = $c;
}
return join($str);
}
$str = "ľÁľa ýellow";
var_dump(make_ascii($str));