Я пытаюсь создать многоязычную форму с Codeigniter.
У меня есть массив POST:
Array
(
[title] => Array
(
[en] => English Title
[de] => German Title
)
[url] => Array
(
[en] => English URL
[de] => German URL
)
)
Я хочу преобразовать это в кодовый код insert_batch('tablename',$data)
в формате:
Array
(
[0] => Array
(
[lang] => en
[title] => English Title
[url] => English URL
)
[1] => Array
(
[lang] => de // Assuming user didn't fill `_de` labeled input fields.
[title] =>
[url] =>
)
)
Данные для хранения в БД:
|id|lang| title | url |
|--|----|---------------|-------------|
| | en | English Title | English URL |
---------------------------------------
Как мне этого добиться? Мне нужно переместить массив записей в стиль массива данных insert_batch
. Выше array[1]
содержит только предопределенные lang
как de
. Так что «1017» буквально для меня пусто. Поэтому мне также нужно удалить пустые массивы из окончательного $data
.
Ниже вы найдете файл просмотра.
<div id="tabs">
<?php echo form_open('controller/post_target',array('name'=>'add_page')); ?>
<ul>
<?php foreach($lang_data as $r):?>
<li><a href="#tab_<?=$r->lang;?>"><?=$r->name;?></a></li>
<?php endforeach; ?>
</ul>
<?php foreach($query_lang as $r):?>
<div id="tab_<?=$r->lang;?>">
<?php echo form_label('Page Title','title'); ?>
<?php
$attr1 = array('name' => 'title[' . $r->lang . ']');
echo form_input($attr1);
$attr2 = array(name' => 'url[' . $r->lang . ']');
echo form_input($attr2);
?>
</div>
<?php endforeach; ?>
<?php echo form_submit('submit','Save'); ?>
<?php echo form_close(); ?>
</div>
Просто для информации, я поцарапал несколько строк в качестве контроллера, но я хочу иметь контроллер с чистой кодировкой по этому поводу. Также моя версия не может проверить это, если массив пуст. :( Любой совет для более профессионального способа приветствуется.
<code>if($this->input->post('submit'))
{
$data = $this->input->post();
unset($data['submit']); // SELF NOTE : IT should be easier way to do this
foreach ($data as $key => $value)
{
$counter = 0;
foreach ($value as $key_inner => $value_inner)
{
if( ! isset($db_array[$counter])) $db_array[$counter] = array();
//Above line enable us to use '+=' operand below in foreach loop
$db_array[$counter] += array(
'lang' => $key_inner,
$key => $value_inner
);
$counter ++;
}
}
//echo '<pre>'; print_r($db_array); echo '
'. '
';
if ($ this-> db-> insert_batch ('test', $ db_array)) echo 'запись сохранена';
}