Dealing with checkboxes quickly

in drupal, fapi, forms, checkboxes

I've been working with the Forms API for some time. I've found a very useful shorthand for that today.

Normall, when a form is submitted, the resulting checkboxes entry in form_state['values'] is an associative array, in which they key is the name of the checkbox, and the value is either 0 (not checked) or the key (checked).

Until now, to filter out the unchecked values I used to do something like 

$checkboxes = $form_state['values']['checkboxes'];
$checkboxes = array_flip($checkboxes);

... which is not very pretty. What I found while reading the source for the flag module was a much better way:

$checkboxes = $form_state['values']['checkboxes'];
$checkboxes = array_values(array_filter($checkboxes));

This exploits the behavior of array_filter() when the second value is null -- it simply strips the elements that have a value that evaluates to false. The additional call to array_values() is not really necessary unless you want numeric keys.

In any case, I hope this helps someone else do things in a simpler way :)

Image from here