2017-10-19 95 views
0

我已经删除了少于2个字符的单词。第一个版本的工作:为什么我使用开关时功能不起作用?

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

使用功能:

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

delLess($words, 3); 

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

但这个更新版本不起作用:

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

你var_dumped'$ lang'? +'$ lang'的默认值不应该是布尔值,而是您的默认语言 –

+0

您期望以$ lang的身份传递什么?你能举一个例子说明你如何调用这个更新后的代码。 –

+0

检查我的答案 – delboy1978uk

回答

1

当使用switch,PHP试图将变量($lang)与case条款相匹配。由于您已将这些字段定义为要使用的字母而不是语言的代码,因此不会与任何字符匹配。

另一种更灵活的解决方案,将有语言代码,并使用该代码字母的关联数组...

<?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) "даст" } 

看看这里:https://3v4l.org/d5BYR

相关问题