从已翻译的数据创建数组并在PHP中合并数组

时间:2014-08-31 21:23:07

标签: php arrays array-merge

我正在设计一个支持多语言的网站。我们的主要语言是土耳其语我不想在管理员插入土耳其语数据时,用外语清空其他字段。因此,当土耳其语数据以“_tr”列结尾时,在外语字段中以“_en”和“_de”结尾,我想从Yandex Translator数据中获取自动翻译的数据。 这是我的表结构: enter image description here

我将插入这样的数据结构:

$data = array(... 'parent_id' => 234, 'date' => "2014-08-31 23:07:47", 'status' => 1);

我想像这样添加“......”:

$translated = array('fruit_tr' => "Elma", 'fruit_en' => "Apple", 'fruit_de' => "Apfel", 'color_tr' => "Kırmızı", 'color_en' => "Red", 'color_de' => "Rot");

我试过了:

$from_turkish = array('fruit' => "Elma", 'color' => "Kırmızı");

public function Translate ($from_turkish) { 
    $langs = array("tr", "en", "de");
    $translated = array();
    foreach ($langs as $lang){
        foreach ($from_turkish as $field_name => $value) {
            $translated[] = array($field_name.'_'.$lang => YandexTrApi($value, 'tr', $lang));   
        }
    }
    return $translated;
}

YandexTrApi函数返回翻译的数据。最后,我使用array_merge这样的函数:

$data_array = array_merge($translated, $data);

但它没有采取这样的形式:

$data_array = array('fruit_tr' => "Elma", 'fruit_en' => "Apple", 'fruit_de' => "Apfel", 'color_tr' => "Kırmızı", 'color_en' => "Red", 'color_de' => "Rot", 'parent_id' => 234, 'date' => "2014-08-31 23:07:47", 'status' => 1);

1 个答案:

答案 0 :(得分:1)

array_merge($translated, $data)很好,$translated + $data会在这种情况下给出相同的结果,但是......

$translated[] = array($field_name.'_'.$lang => YandexTrApi($value, 'tr', $lang));

...这样你就可以在$translated数组中推送新数组了。您只需要添加新密钥 - 请尝试使用此代码:

$translated[$field_name.'_'.$lang] = YandexTrApi($value, 'tr', $lang);

同样嵌套的foreach()循环会给你略微不同的顺序,但我猜你不需要它来匹配db(因为你的...部分可能放在{{{ 1}}键)。