我有一个复杂的数组(至少在我看来很复杂(。我有一个表格,你可以选择一个人,开始时间和结束时间。然后,您可以通过单击+按钮添加更多人员。因此,我将三个select字段命名为数组的"select_dancer[]"。
当我打印我的结果时,它看起来像这样:
Array
(
[month_year] => 2011-11
[select_dancer] => Array
(
[0] => 1
[1] => 2
)
[time_from] => Array
(
[0] => 12:00pm
[1] => 1:00pm
)
[time_to] => Array
(
[0] => 12:30pm
[1] => 1:30pm
)
)
基本上,密钥0是一个人,密钥1是另一个人。等等。我很难把这个添加到数据库中。我的表基本上是:id,date,dancer,from,to。所以我想要它,这样我就可以将每个键"分组"在一起,并将值提交到数据库。
如果有人能帮我,那就太好了。
一种更简单的字段分组方法是在您的HTML 中这样做
<input name="dancer[0][id]" ...
<input name="dancer[0][time_from]" ...
<input name="dancer[0][time_to]" ...
添加每组时,递增第一个方括号中的数字。
您得到的$_POST
阵列将看起来像
Array
(
[month_year] => 2011-11
[dancer] => Array
(
[0] => Array
(
[id] => 1,
[time_from] => 12:00pm
[time_to] => 12.30pm
)
[1] => Array
(
[id] => 2
[time_from] => 1:00pm
[time_to] => 1:30pm
)
)
)
然后,您可以为每组值迭代$_POST['dancer']
数组,例如(非常简化的(
foreach ($_POST['dancer'] as $dancer) {
if (!isset($dancer['id'], $dancer['time_from'], $dancer['time_to'])) {
throw new Exception('All fields are required');
}
$id = $dancer['id'];
$timeFrom = $dancer['time_from'];
$timeTo = $dancer['time_to'];
}
试试这样的东西:
for ($i = 0; $i < count($mydata["select_dancer"]); $i++)
{
$insert = "insert into mytable (date, dancer, from to) values ($mydata['month_year'], $mydata['select_dancer'][$i], $mydata['time_from'][$i], $mydata['time_to'][$i])";
do_sql_insert($insert);
}
这样,你就很容易受到注入攻击,而且特定的舞者可能在每个子数组中都没有代表索引。如果可以的话,就照着@Phil写的去做吧。
如果元素select_dancer
、time_from
、time_to
中的每一个都具有相同的数组大小,则可以很容易地检查其中的任何一个,并使用它进行循环:
警告:未测试代码
foreach($post_array['select_dancer'] as $key => $value)
{
$sql = "INSERT INTO dance_table(date, dancer, from, to) ";
$sql .= "VALUES('{$wherever_you_got_the_date}', '{$value}',";
$sql .= "'" . $post_array['time_from'][$key] . "', ";
$sql .= "'" . $post_array['time_from'][$key] . "')";
}
foreach($_POST[select_dancer] as $key => $value) {
$sql = "insert into table set dancer=$value,from='{$_POST['time_from'][$key]}',to={$_POST['time_to'][$key]}';"
//execute the SQL ...
}
当然,在现实生活中要处理的是对SQL注入等的保护,但访问数组的原理是相同的