2017-10-19 28 views
0

J'ai une fonction pour enlever les mots de moins de 2 caractères. La première version fonctionne:Pourquoi ma fonction ne fonctionne pas lorsque j'utilise le commutateur?

function delLess2($array, $less){ 
    $english = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM"; 
    return preg_grep('~\A[^'.$english.']{'.$less.',}\z~u', $array); 
} 

Utilisation de la fonction:

$words = array("ӯ","ӯро","ӯт","ғариб","афтода","даст", "ра"); 

delLess($words, 3); 

// Output 
Array 
(
    [1] => ӯро 
    [3] => ғариб 
    [4] => афтода 
    [5] => даст 
) 

Mais cette version mise à jour ne fonctionne pas:

function delLess(&$array, $less = 0, $lang = FALSE) 
{ 
    $english = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM"; 
    $russian = "ёйцукенгшщзхъфывапролджэячсмитьбюЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ"; 

    define(ENGLISH, $english); 
    define(RUSSIAN, $russian); 

    switch ($lang) 
    { 
     case ENGLISH: 
      return preg_grep('~\A[^'.ENGLISH.']{'.$less.',}\z~u', $array); 
      break; 

     case RUSSIAN: 
      return preg_grep('~\A[^'.RUSSIAN.']{'.$less.',}\z~u', $array); 
      break; 

     default: 
      return false;  
    } 
} 

Où dans le code que j'ai une erreur? Comment peut-il être corrigé?

+0

Avez-vous var_dumped 'lang' de $? + la valeur par défaut de '$ lang' ne devrait pas être un booléen mais votre langue par défaut –

+0

Qu'attendez-vous pour passer comme $ lang? Pouvez-vous montrer un exemple de comment vous avez appelé ce code mis à jour. –

+0

vérifier ma réponse – delboy1978uk

Répondre

1

Lorsque vous utilisez un switch, PHP tente de faire correspondre la variable ($lang) avec l'une des clauses case. Comme vous avez défini ces champs comme étant l'alphabet que vous voulez utiliser plutôt qu'un code pour la langue, il ne correspond à aucun d'entre eux.

Une alternative et plus solution évolutive, serait d'avoir un tableau associatif des codes de langue et l'alphabet à utiliser pour ce code ...

<?php 
error_reporting (E_ALL); 
ini_set ('display_errors', 1); 

$words = array("ӯ","ӯро","ӯт","ғариб","афтода","даст", "ра"); 

function delLess(&$array, $less = 0, $lang = 'en') 
{ 
    $trans = ["en" => "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM", 
      "ru" => "ёйцукенгшщзхъфывапролджэячсмитьбюЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ" 
    ]; 

    if (isset($trans[$lang])) { 
     return preg_grep('~\A[^'.$trans[$lang].']{'.$less.',}\z~u', $array); 
    } 
    else { 
     return false; 
    } 
} 

$test = delLess($words, 3, 'en'); 
print_r($test); 
1

Définissez une langue par défaut et supprimez vos constantes.

<?php 

$words = array("ӯ","ӯро","ӯт","ғариб","афтода","даст", "ра"); 

function delLess(&$array, $less = 0, $lang = 'ru') 
{ 
    $english = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM"; 
    $russian = "ёйцукенгшщзхъфывапролджэячсмитьбюЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ"; 

    switch ($lang) 
    { 
     case 'en': 
      return preg_grep('~\A[^'.$english.']{'.$less.',}\z~u', $array); 
      break; 

     case 'ru': 
      return preg_grep('~\A[^'.$russian.']{'.$less.',}\z~u', $array); 
      break; 

     default: 
      throw new Exception('unsupported language');  
    } 
} 

var_dump(delLess($words, 3, 'en')); 

qui vous donnent:

array(4) { [1]=> string(6) "ӯро" [3]=> string(10) "ғариб" [4]=> string(12) "афтода" [5]=> string(8) "даст" } 

Check it out ici: https://3v4l.org/d5BYR