2012-04-12 86 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]); 
    } 
} 

如果使用臨時變量,你必須添加邏輯爲每一個新進入到原來的陣列。這聽起來像是維修麻煩。