2012-04-12 85 views
1

这是我到目前为止有:数组中的PHP函数?

$arrayPrices = array(
    translate($lang_type, "A/C System Evaluation") => "19.95", 
    translate($lang_type, "A/C Evaluation & Recharge") => "99.00" 
); 

而且我翻译功能是:

function translate($to_lan, $text) { 
if($to_lan == "en") { 

    return $text; 

} else { 

    $translate_feed = @file_get_contents('http://api.microsofttranslator.com/v2/Http.svc/Translate?appId=' . BING_APPID . '&text=' . urlencode($text) . '&from=en&to=' . $to_lan . ''); 
    $translate = simplexml_load_string($translate_feed); 

    return ($translate_feed === false) ? $text : $translate[0]; 
    } 
} 

出于某种原因,我不能显示我的PHP阵列的内部翻译功能。

如果我输入echo translate($lang_type, "A/C System Evaluation");它工作得很好并翻译。但在该数组中使用时,它只是返回空白。

有没有人有任何想法我可以做什么?

+1

语法正确,所以可能会有一些副作用,如未初始化状态,或第二个请求被阻止。您当然不应该从远程API调用初始化数组。特别是如果某些值可能永远不会被使用。 – mario 2012-04-12 23:33:05

回答

2

PHP Array docs

密钥可以是一个整数或字符串。该值可以是任何类型。

把你的钥匙串中的第一瓦尔,如:

$var1 = translate($lang_type, "A/C System Evaluation"); 
$var2 = translate($lang_type, "A/C Evaluation & Recharge"); 

$arrayPrices = array(
    "$var1" => 19.95 
    "$var2" => 29.95 
); 

这应该很好地工作。

+0

你可以直接使用'(string)translate(...)=> ...'或['strval'](http://php.net/manual/)直接调用'translate'到一个字符串的结果EN/function.strval.php)。 – 2012-04-12 23:33:12

+0

@DavidHarkness有很多方法可以解决这个问题,这是我认为操作者会欣赏的最简单的IMO。为什么不发表你自己的答案? – Madbreaks 2012-04-12 23:36:26

+0

你的回答解决了这个问题 - 由'transate'返回的值不是字符串。我只是指出了从这些值创建字符串的更简单的方法。你仍然应该得到信用。 :) – 2012-04-12 23:40:50

1

做这项工作:

$arrayPrices[translate($lang_type, "A/C System Evaluation")]= "19.95"; 
$arrayPrices[translate($lang_type, "A/C Evaluation & Recharge")] = "99.00"; 
+0

我想你已经有了一组额外的括号 - 这将建立一个二维数组。 – Madbreaks 2012-04-12 23:31:53

+0

好抓,删除 – 2012-04-12 23:33:05

+0

你试过这个吗?当我返回一个实现'__toString'的类时,它不适用于我。 – 2012-04-12 23:43:39

0

要能够广泛地添加到产品列表,而不必更动临时变量很大我相信。这是那些情形之一的,我会做阵列上的处理后运行,像这样:

$arrayPrices = array(
    "A/C System Evaluation" => "19.95", 
    "A/C Evaluation & Recharge" => "99.00", 
    // ... etcetera ... 
); 

$keys = array_keys($arrayPrices);  
foreach($keys as $keyText) 
{ 
    $translatedKeyText = translate($lang_type, $keyText); 
    if ($translatedKey != $keyText) 
    { 
     $arrayPrices[$translatedKeyText] = $arrayPrices[$keyText]; 
     unset($arrayPrices[$keyText]); 
    } 
} 

如果使用临时变量,你必须添加逻辑为每一个新进入到原来的阵列。这听起来像是维修麻烦。