如果密钥不存在,则返回密钥本身 php

时间:2021-01-04 13:19:40

标签: php arrays

这是我的代码 如果语句不存在,我希望它返回键值 就像最后一行代码中的“东西”,但它不起作用

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');

3 个答案:

答案 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');