Передача динамическое таблицы в виде массива
Создаем динамическую таблицу:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style>
#tbl {
border-collapse: collapse;
}
#tbl td {
border: 1px solid #ddd;
padding: 4px;
}
#tbl input {
width: 50px;
}
a.delRow, #addRow {
display: block;
cursor: pointer;
}
</style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script>
$(function() {
$('#addRow').click(function() {
var t = $('#tbl');
t.find('tr')
.eq(1)
.clone()
.appendTo(t)
.find('td:last')
.append('<a class="delRow">удалить</a>')
.end()
.find('input')
.val('');
});
$('#tbl').on('click', 'a.delRow', function() {
$(this).closest('tr').remove();
});
});
</script>
</head>
<body>
<form action="create.php" method="POST">
<table id="tbl">
<tr>
<td>Поле раз</td>
<td>Поле два</td>
<td>Поле три</td>
<td>Поле четыре</td>
<td><a id="addRow">+</a></td>
</tr>
<tr>
<td><input type="text" name="name[]" /></td>
<td><input type="text" name="count[]" /></td>
<td><input type="text" name="unit[]" /></td>
<td><input type="text" name="price[]" /></td>
<td></td>
</tr>
</table>
<input type="submit"/>
</form>
</body>
</html>
Получаем данные в формате:
$_REQUEST['name']
Array
(
[0] => data1
[1] => data2
[2] => data3
)
$_REQUEST['count']
Array
(
[0] => data1
[1] => data2
[2] => data3
)
$_REQUEST['unit']
Array
(
[0] => data1
[1] => data2
[2] => data3
)
$_REQUEST['price']
Array
(
[0] => data1
[1] => data2
[2] => data3
)
$_POST['name']
Array
(
[0] => data1
[1] => data2
[2] => data3
)
$_POST['count']
Array
(
[0] => data1
[1] => data2
[2] => data3
)
$_POST['unit']
Array
(
[0] => data1
[1] => data2
[2] => data3
)
$_POST['price']
Array
(
[0] => data1
[1] => data2
[2] => data3
)
Подскажите пожалуйста, как привести полученные данные к формату:
$prods = array(
array(
'name' => 'data1',
'count' => data1,
'unit' => 'data1',
'price' => data1,
'nds' => ,
),
array(
'name' => 'data2',
'count' => data2,
'unit' => 'data2',
'price' => data2,
'nds' => ,
),
array(
'name' => 'data3',
'count' => data3,
'unit' => 'data3',
'price' => data3,
'nds' => ,
),
);
Ответы (1 шт):
Автор решения: splash58
→ Ссылка
я поленился писать все ваши массивы, дополните там в двух местах, где стоят троеточия
function zip() {
$args = func_get_args();
foreach($args as &$x) {
if(is_string($x)) {
$x = str_split($x);
}
else {
$x = (array) $x;
}
}
while (True) {
$r = [];
foreach($args as &$x) {
if(! $x) {
break 2;
}
$r[] = array_shift($x);
}
yield $r;
}
}
$prods = [];
foreach(zip($_REQUEST['name'], $_REQUEST['count'], $_REQUEST['unit'],..) as $x) {
$prods[] = array_combine(['name', 'count', 'unit',..], $x);
}