来自函数的php数组键

时间:2016-04-14 10:00:39

标签: php arrays methods

我正在研究一个问题,我想以一般方式解决它。 要获得API响应的翻译,请使用以下代码:

$array['name'] = getTranslation($key);

这会根据用户设置获得翻译,并可能导致以下操作返回带有翻译的密钥或仅返回密钥。这使得数组如下:

//user only can get the key
$array['name']['key'] = 'key';

//user can get both key and translation
$array['name']['key'] = 'key';
$array['name']['translation'] = 'translation';

这个解决方案运行良好,但不幸的是它必须改变。翻译密钥必须始终在密钥中,并且必须将翻译放在_key中。但仅当用户设置允许他们获得翻译时。这导致以下结果:

$array['name'] = 'key';
$array['_name'] = 'translation';

或只是:

 $array['name'] = 'key';

不幸的是,翻译被广泛使用,如果用户可以翻译,我不想在每种方法中进行检查。

所以现在我想知道,如果有办法在全球范围内解决这个问题。理想情况下是创建一种方法来解决这个问题:

$arraykey = 'name';
$array[$arraykey] = getTranslations('translationkey', $arraykey);

它最终将在数组中结束:

$array['name'] = 'translationkey';
$array['_name'] = 'translated value';

1 个答案:

答案 0 :(得分:1)

从您的建议开始创建新功能,您可以尝试以下内容:

function getTranslations($translationKey, $arrayKey)
{
     $translation = getTranslation($translationKey);

     $result = array($arrayKey => $translation['key']);
     if (/*user settings enabled translations*/) {
         $result['_' . $arrayKey] = $translation['translation'];
     }

     return $result;
}

// usage
$translation = getTranslations('namekey', 'name');

// if you have more translations in the final array then you can use array_merge
$translation = getTranslations('namekey', 'name');
$translation = array_merge($translation, getTranslations('phonekey', 'phone'));