我正在写一个涉及具有许多复选框的表单的drupal模块。例如。用值为0的复选框提交drupal表单的问题
$form['myform_checkboxes'] = array('#type' => 'checkboxes', ...)
我已经使这些复选框的数字从0开始。
$form['myform_checkboxes']['#options'][0] = '0:00';
$form['myform_checkboxes']['#options'][1] = '1:00';
实施此myform_checkboxes_submit功能,我发现,这是很难解释什么用户的输入了。在interwebs上,我发现了几行很好的代码,可以完成我所需要的功能。
$checked = array_intersect(
array_keys($form_state['values']['myform_checkboxes']),
array_values($form_state['values']['myform_checkboxes'])
);
这似乎工作得很好; $ checked变量是一个仅包含选中复选框的数组。唯一的问题是值0(代表第0个复选框)总是包含在$ checked中,无论它是否被实际检查。
同样有用的注意:如果它被选中,零将首先出现在列表中,但如果它没有被选中,则为零。
假设更改复选框的索引是不可能的,那么解决这种情况的最佳方法是什么? (相关的奖金问题:是否有一种更容易的方式从drupal表单变量中获取用户的选中框)
我不明白你的意思_“我发现很难解释用户的输入是什么”_。你能否澄清你的意思,你想达到什么目的(例如:你能举一个'$ checked'应该是怎样的例子)? – mac
我已经添加了一个答案,但我会说,重新索引数组是一个更好的主意。 'check0','check1'等等。我没有把这个作为答案,因为你在你的问题中明确拒绝了这个想法,但它会容易得多。 –
@mac,我希望Drupal只是使用checked复选框键返回一个数组,而不需要使用array_intersect()来查找它们。 $ checked应该就是这样,一个选中的复选框数组。例如,$ checked == array(3,4,5)如果用户已经检查了3:00,4:00和5:00,并且没有别的。 –