我正在寫一個涉及具有許多複選框的表單的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,並且沒有別的。 –