2011-03-16 103 views
4

我有一個包含單詞的數組,其中一些單詞帶有重音符號。我想測試一個給定的單詞是否進入該數組,但使其不區分大小寫和重音。例如:將PHP區分大小寫不區分搜索到數組

$array = array("coche","camión","moto","carro"); 

我想要一個簡單的小函數,像in_array。如果我的字符串是'Camion''camión'它應該返回true

任何想法?

回答

4

嘗試了這一點::-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建議

+0

我不認爲這是考慮口音。 – Dan 2011-03-16 18:37:36

+0

hmmmm true;我必須補充一點。幾分鐘 – Neal 2011-03-16 18:38:35

+0

在那裏我們去,那應該工作。改變口音和所有 – Neal 2011-03-16 18:40:46

2

你應該使用的iconv與TRANSLIT

http://php.net/manual/en/function.iconv.php

但考慮iconv TRANSLIT是基於SO的。所以機器之間的結果並不一樣。

你已經標準化的口音後,你可以做一個用strtolower()或正則表達式搜索/我

1

最簡單的辦法是建立一個轉換表像這樣:

$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); 
+0

strtr()期望參數3是字符串,數組給定 – user151496 2014-11-24 17:33:43