Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP不区分大小写和重音的数组搜索_Php_Arrays_String_Search - Fatal编程技术网

PHP不区分大小写和重音的数组搜索

PHP不区分大小写和重音的数组搜索,php,arrays,string,search,Php,Arrays,String,Search,我有一个包含单词的数组,其中一些带有重音。我想测试给定的单词是否进入该数组,但不区分大小写和重音。例如: $array = array("coche","camión","moto","carro"); 我想要一个简单的小函数,类似于数组中的。如果我的字符串是'Camion'或'camión'它应该返回true 有什么想法吗?试试这个::-D function check_array($array, $string){ $trans = array("é" => "e", "&am

我有一个包含单词的数组,其中一些带有重音。我想测试给定的单词是否进入该数组,但不区分大小写和重音。例如:

$array = array("coche","camión","moto","carro");
我想要一个简单的小函数,类似于数组中的
。如果我的字符串是
'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');

按照建议使用stracecmp

您应该将iconv与translatit一起使用

但是考虑到ICOV翻译是如此基础。因此,不同机器的结果并不相同


规范化重音后,可以执行strtolower()或使用REGEX/i进行搜索。最简单的方法是设置一个翻译表,如下所示:

$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')
);
然后您可以使用按字节顺序进行翻译:

$string = strtr("Camion",$translation['from'],$translation['to']);
接下来,它应该全部在英语范围内
a-z a-z

如果您的服务器支持iconv,您可以这样做:

$string = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string);

我不相信这会考虑口音;我得补充一点。很少有人可以考虑使用<代码> StraseCMP:Strr()希望参数3是字符串,数组是给定的