2017-10-19 13 views
0

私は2文字以下の単語を削除する機能を持っています。スイッチを使用すると、私の機能が動作しないのはなぜですか?

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

delLess($words, 3); 

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

しかし、この更新されたバージョンでは動作しません:

機能を使用して
function delLess2($array, $less){ 
    $english = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM"; 
    return preg_grep('~\A[^'.$english.']{'.$less.',}\z~u', $array); 
} 

を:最初のバージョンが動作しているコードで、私はエラーを持っている

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;  
    } 
} 

を?どのように修正することができますか?

+0

あなたは '$のlang'をvar_dumpedことがありますか? + '$ lang'のデフォルト値はブール値ではなく、あなたのデフォルト言語であるべきです –

+0

$ langとして何を渡すと思いますか?この更新されたコードをどのように呼び出したかの例を示すことができます。 –

+0

私の答えをチェック – delboy1978uk

答えて

1

を、PHPはcase句の一つの変数($lang)を一致させようとします。これらのフィールドは、言語のコードではなく、使用するアルファベットとして定義されているため、いずれのフィールドとも一致しません。

代わり、よりスケーラブルなソリューションは、言語コードとそのコードに使用するアルファベットの連想配列を持っているだろう...

<?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

デフォルト言語を設定して定数を削除します。

あなたを与える
<?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')); 

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

ここでそれをチェックアウト:switchを使用している場合https://3v4l.org/d5BYR

関連する問題