2014-08-31 5 views
1

Я проектирую сайт с поддержкой нескольких языков. Наш основной язык - турецкий. Я не хочу, пока администратор вставляет турецкие данные, пустые другие поля на иностранных языках. Поэтому, когда турецкая вставка данных заканчивается столбцами «_tr», в полях на иностранном языке заканчиваются «_en» и «_de», я хочу получить данные Yandex Translator, которые автоматически переводятся. Вот моя структура таблицы: enter image description hereСоздание массива из переведенных данных и слияние массива в PHP

Моя структура данных, как это, которое будет вставлено:

$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); 
+0

Почему у вас нет столбца по умолчанию и убедитесь, что он всегда заполнен? Затем по запросу, если предпочитаемый языковой столбец пуст, вернитесь к умолчанию? – Anthony

+0

@Anthony. Когда у нас есть столбец по умолчанию, например 'fruit',' color', то заполняется как 'fruit_en',' color_en', что вызывает проблемы при восстановлении данных. Потому что при использовании '$ lang-> selected', например' $ row ["fruit {$ lang-> selected}"] ', поиск программ' fruit_tr', но нет. С другой стороны, такой практической схемы кодирования не существует. –

ответ

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() петли вложенными, как это даст вам несколько иной порядок, но я думаю, вам это не нужно, чтобы соответствовать дб (в качестве части ... может быть помещен до parent_id).

+0

Большое спасибо. Теперь я заметил. Это хорошее решение для моей проблемы. –

Смежные вопросы