这是我的代码 如果语句不存在,我希望它返回键值 就像最后一行代码中的“东西”,但它不起作用
function getTranslation($translations, $lang, $statement)
{
$lang = $translations[$lang];
$statement = $lang[$statement];
return $statment;
}
$translations = [
'fa' => ['Hello!' => 'hi!', 'Hi!' => 'hi!'],
'fr' => ['Hello!' => 'Bonjour!']
];
echo getTranslation($translations, 'fa', 'Hi!');
echo PHP_EOL;
echo getTranslation($translations, 'fr', 'Hello!');
echo PHP_EOL;
echo getTranslation($translations, 'fr', 'Something');
答案 0 :(得分:2)
您可以使用空值 coalesce operator ??
(在 PHP 7 中引入)表示如果数组元素不存在,则返回一个默认值 - 在本例中为 $statement
。 ..
function getTranslation($translations, $lang, $statement)
{
$lang = $translations[$lang];
return $lang[$statement] ?? $statement;
}
答案 1 :(得分:1)
function getTranslation($translations, $lang, $statement)
{
$lang = $translations[$lang];
//check if $statement key does not exist in $lang
if(!array_key_exists($statement, $lang)) {
//array key does not exist, return $statement
return $statement;
}
//array key always exists, so return translated value
return $lang[$statement];
}
您可以使用三元将其缩短一点。
function getTranslation($translations, $lang, $statement)
{
$lang = $translations[$lang];
return array_key_exists($statement, $lang) ? $lang[$statement] : $statement;
}
答案 2 :(得分:0)
我建议您阅读基本运算符 isset
https://www.php.net/manual/en/function.isset.php
您的代码将如下所示:
function getTranslation($translations, $lang, $statement)
{
if (!isset($translations[$lang])) { // checking that "translation catalogue" exist
return null; // consider throwing an exception if translation is missing
}
$catalogue = $translations[$lang]; // saving it into variable
if (!isset($catalogue[$statement])) { // checking that "word" exists in catalogue
return $statement; // if it does not exist return requested "word"
}
return $catalogue[$statement]; // otherwise return "translated word"
}
$translations = [
'fa' => ['Hello!' => 'hi!', 'Hi!' => 'hi!'],
'fr' => ['Hello!' => 'Bonjour!']
];
echo getTranslation($translations, 'fa', 'Hi!');
echo PHP_EOL;
echo getTranslation($translations, 'fr', 'Hello!');
echo PHP_EOL;
echo getTranslation($translations, 'fr', 'Something');