我有一个包含单词的数组,其中一些单词带有重音符号。我想测试一个给定的单词是否进入该数组,但使其不区分大小写和重音。例如:将PHP区分大小写不区分搜索到数组
$array = array("coche","camión","moto","carro");
我想要一个简单的小函数,像in_array
。如果我的字符串是'Camion'
或'camión'
它应该返回true
。
任何想法?
我有一个包含单词的数组,其中一些单词带有重音符号。我想测试一个给定的单词是否进入该数组,但使其不区分大小写和重音。例如:将PHP区分大小写不区分搜索到数组
$array = array("coche","camión","moto","carro");
我想要一个简单的小函数,像in_array
。如果我的字符串是'Camion'
或'camión'
它应该返回true
。
任何想法?
尝试了这一点::-D
function check_array($array, $string){
$trans = array("é" => "e", "é" => "e", "á" => "a", "á" => "a", "í" => "i","í"=>"i", "ó"=>"o", "ó" => "o", "ú" => "u", "ú"=>"u","ö" => "u", "ü"=>"u");
$realString = strtr($string,$trans);
foreach($array as $val){
$realVal = strtr($val,$trans);
if(strcasecmp($realVal, $realString) == 0){
return true;
}
}
return false;
}
所以使用它:
check_array($array, 'Camion');
使用strcasecmp
按照Felix Kling建议
你应该使用的iconv与TRANSLIT
http://php.net/manual/en/function.iconv.php
但考虑iconv TRANSLIT是基于SO的。所以机器之间的结果并不一样。
你已经标准化的口音后,你可以做一个用strtolower()或正则表达式搜索/我
最简单的办法是建立一个转换表像这样:
$translation = array(
'from' => array(
'à','á','â','ã','ä', 'ç', 'è','é','ê','ë', 'ì','í','î','ï', 'ñ',
'ò','ó','ô','õ','ö', 'ù','ú','û','ü', 'ý','ÿ', 'À','Á','Â','Ã',
'Ä','Ç', 'È','É','Ê','Ë', 'Ì','Í','Î','Ï', 'Ñ', 'Ò','Ó','Ô','Õ',
'Ö', 'Ù','Ú','Û','Ü', 'Ý')
'to' => array(
'a','a','a','a','a', 'c', 'e','e','e','e', 'i','i','i','i', 'n',
'o','o','o','o','o', 'u','u','u','u', 'y','y', 'A','A','A','A','A',
'C','E','E','E','E', 'I','I','I','I', 'N', 'O','O','O','O','O',
'U','U','U','U', 'Y')
);
,然后你可以使用strtr做字节顺序翻译:
$string = strtr("Camion",$translation['from'],$translation['to']);
下,这应该都是在英国范围内a-z A-Z
。
如果您的服务器支持iconv
你可以做一些像这样:
$string = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string);
strtr()期望参数3是字符串,数组给定 – user151496 2014-11-24 17:33:43
了类似的问题,并就如何做到这一点的一些想法见Accent-insensitive substring matching。
我不认为这是考虑口音。 – Dan 2011-03-16 18:37:36
hmmmm true;我必须补充一点。几分钟 – Neal 2011-03-16 18:38:35
在那里我们去,那应该工作。改变口音和所有 – Neal 2011-03-16 18:40:46