2017-10-02 6 views
0

Je dois supprimer les mots si dans le mot ont des lettres "ц", "щ", "ы", "ь". Je crée cette fonction pour avoir besoin de moi mais ça marche lentement.Comment je peux supprimer des mots si mot ont ces lettres

public function CheckToInsert($text) 
{ 

$xarfho = array("ц", "щ", "ы", "ь","қ","ӣ","ғ","ҷ","ҳ","ӯ","Қ","Ӣ","Ғ","Ҷ","Ҳ","Ӯ"); 

foreach ($xarfho as $xarf) 
{ 
    if (stripos($text,$xarf) !== false) 
    { 
     return true; 
    } 
} 



return false; 

} 

public function UnsetUncorrectWords($words) 
{ 
    foreach ($words as $key => $value) 
    { 
     if($this->CheckToInsert($value) == false) unset($words[$key]); 
     if(strlen($value) < 3) unset($words[$key]); 
    } 

    return $words; 
} 
+0

Si vous essayez de translittérer vous pouvez convertir toute la chaîne en utf-8 – teeyo

+0

Non, je veux juste supprimer tous les mots dans lesquels il y a ces lettres du texte – John

+0

Quelque chose comme https://ideone.com/ 1PnQ63? –

Répondre

2

Vous pouvez utiliser preg_grep pour obtenir soit les éléments du tableau qui contiennent une correspondance regex, soit ceux qui ne contiennent pas une correspondance avec un drapeau PREG_GREP_INVERT.

Donc, pour obtenir tous les éléments qui ont pas de lettres de votre choix, utilisez

$xarfho = array("ц", "щ", "ы", "ь","қ","ӣ","ғ","ҷ","ҳ","ӯ","Қ","Ӣ","Ғ","Ҷ","Ҳ","Ӯ"); 
$wrds = array('Еыфвҷ','цӣвееп','аааа'); 
$pat = '/[' . implode("", $xarfho) . ']/u'; 
$res = preg_grep($pat, $wrds, PREG_GREP_INVERT); 
// => Array ( [2] => аааа) 

Voir la PHP demo

Pour obtenir les articles avec les "ц", "щ", "ы", "ь","қ","ӣ","ғ","ҷ","ҳ","ӯ","Қ","Ӣ","Ғ","Ҷ","Ҳ","Ӯ" lettres, utilisez

$xarfho = array("ц", "щ", "ы", "ь","қ","ӣ","ғ","ҷ","ҳ","ӯ","Қ","Ӣ","Ғ","Ҷ","Ҳ","Ӯ"); 
$wrds = array('Еыфвҷ','цӣвееп','аааа'); 
$pat = '/[' . implode("", $xarfho) . ']/u'; 
$res = preg_grep($pat, $wrds); 
// => Array ([0] => Еыфвҷ [1] => цӣвееп) 

Voir another PHP demo.

Les regexps ressembleront /[цщы]/u[...] est une classe qui correspond à tout char (ou une plage de caractères) caractère défini dans le schéma et le modificateur /u est nécessaire puisque votre modèle contient des caractères autres que ASCII et le modificateur de UNICODE rendra le moteur regex correctement analyser à la fois le motif et les chaînes d'entrée.

2

Je suggère de réécrire votre fonction (ou de ne pas utiliser une fonction du tout) comme ça:

public function UnsetUncorrectWords($words) 
{ 
    return preg_grep('~\A[^қӣғҷҳӯҚӢҒҶҲӮ]{3,}\z~u', $words); 
} 

preg_grep filtres éléments du tableau qui ne correspondent pas au modèle.

Le motif décrit des mots avec au moins 3 caractères écrits sans les lettres қ, ӣ, ғ, ҷ, ҳ, ӯ, Қ, Ӣ, Ғ, Ҷ, Ҳ, Ӯ.

Notez que vous ne pouvez pas utiliser strlen avec des caractères multi-octets car celui-ci renvoie le nombre d'octets, pas le nombre de caractères.

+0

Comment puis-je utiliser cette fonction. Pouvez-vous écrire sumple en utilisant le code de test? – John