Das ist die Ursache. [e]

Prinzipiell braucht man das ganze Lametta aber auch gar nicht, weil's auf ein if hinaus läuft:

Show Plain Text
  1. echo '<input type="checkbox" value="filtervalue" name="filter[]"';
  2. if (in_array('filtervalue', $_POST['filter'])) {
  3.   echo ' checked';
  4. }
  5. echo '>';


Ist schwer zu sagen, wenn man das drumherum nicht kennt. Wenn ich mit der $filter Struktur so wie sie ist leben müsste, würde ich es so machen:

Show Plain Text
  1. function isFilterCheckboxSet($value) {
  2.   return isset($_POST['filter']) && in_array($value, $_POST['filter']);
  3. }
  4.  
  5. function checkboxFilter($value) {
  6.   $out = '<input type="checkbox" value="' . $value . '" name="filter[]"';
  7.   if (isFilterCheckBoxSet($value)) {
  8.     $out .= ' checked';
  9.   }
  10.   $out .= '>';
  11.   return $out;
  12. }
  13.  
  14. echo checkboxFilter('filtervalue');


Gruß
Schlaefer