2013-11-14 47 views
0

我正在重新构建我的php应用程序中的语言系统,以便更容易地创建翻译。php - in_array在文件中包含数组时返回false

我做的一件事情就是将所有东西都转换成一个大数组$ lang;这里是什么样子的例子:

require_once "lang/en/lang.php"; 

调用$ LANG [“共同的:登录”]

$lang['common:login'] = "Login"; 
$lang['common:signup'] = "Sign Up"; 
$lang['index:title'] = "Home Page"; 
$lang['messages:newmessages'] = "You have %s new messages"; 

我用下面的代码加载它没有问题wqork中,一旦我做了一个加载这些函数的函数,与之前我做过的其他方法相比,就会出现问题。

function outputLanguage($tag) { 

    global $lang; 

    //see if tag exists. 
    if (!in_array($tag, $lang)) { 
     return $tag." is an invalid language tag."; 
    } else { 
     return $lang[$tag]; 
    } 
} 

看起来,in_array()不喜欢使用其他来源包含的数组。

我诚实地想要有一些验证,以防有人犯了一个错误,那么是否有人知道一个好的解决方案?

谢谢。

+1

in_array()没有按” t知道或关心$ lang数组是从另一个源包含的;但肯定你应该测试的关键,而不是价值...和in_array()测试值 –

+0

你的权利,不知道我在想什么。 – Eman

回答

3

您需要使用array_key_exists代替in_array

+0

注意'isset'和'array_key_exists'然而,http://stackoverflow.com/questions/3210935/difference-between-isset-and-array-key-exists – hank

+0

Doh你的权利,这是问题,谢谢你的清爽我的记忆。 – Eman

0

您正在寻找的数组键,尝试:

if(!isset($lang[$tag])) { 
    return $tag." is an invalid language tag."; 
} else { 
    return $lang[$tag]; 
} 

或者,我会回来false

return isset($lang[$tag]) ? $lang[$tag] : false;