Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从转换数据创建数组并在PHP中合并数组_Php_Arrays_Array Merge - Fatal编程技术网

从转换数据创建数组并在PHP中合并数组

从转换数据创建数组并在PHP中合并数组,php,arrays,array-merge,Php,Arrays,Array Merge,我正在设计一个支持多种语言的网站。我们的主要语言是土耳其语。我不想在管理员插入土耳其语数据时,用外语清空其他字段。因此,当土耳其语数据插入以“_tr”列结尾时,在外语字段中以“_en”和“_de”结尾,我想从Yandex Translator获取自动翻译的数据。 以下是我的表格结构: 我的数据结构如下所示,将插入: $data = array(... 'parent_id' => 234, 'date' => "2014-08-31 23:07:47", 'status' =>

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

我的数据结构如下所示,将插入:

$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");
$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);
我试过这个:

$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;
}
API
函数返回翻译后的数据。最后,我使用了
array\u merge
函数,如下所示:

$data_array = array_merge($translated, $data);
但它的形式并非如此:

$translated = array('fruit_tr' => "Elma", 'fruit_en' => "Apple", 'fruit_de' => "Apfel", 'color_tr' => "Kırmızı", 'color_en' => "Red", 'color_de' => "Rot");
$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);
array\u 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(因为您的
..
部分可能会放在
父id
键之前)。

为什么不为默认设置一列并确保始终填充它?然后在查询首选语言列是否为空时,返回到默认值?@Anthony-当我们有默认列,如
水果
颜色
,然后填充,如
水果
颜色
,这会导致检索数据时出现问题。因为当使用
$lang->selected
$row[“fruit{$lang->selected}”
一样时,程序搜索
水果,但没有。另一方面,这样的编码并没有实际的好处。非常感谢。现在我注意到了。这是解决我问题的好办法。