Fix issue #2695
diff --git a/system/helpers/form_helper.php b/system/helpers/form_helper.php
index 400a91f..a3d299b 100644
--- a/system/helpers/form_helper.php
+++ b/system/helpers/form_helper.php
@@ -682,9 +682,20 @@
 		{
 			return ($default === TRUE) ? ' selected="selected"' : '';
 		}
-		elseif (is_array($input) && in_array($value, $input, TRUE))
+
+		$value = (string) $value;
+		if (is_array($input))
 		{
-			return ' selected="selected"';
+			// Note: in_array('', array(0)) returns TRUE, do not use it
+			foreach ($input as &$v)
+			{
+				if ($value === $v)
+				{
+					return ' selected="selected"';
+				}
+			}
+
+			return '';
 		}
 
 		return ($input === $value) ? ' selected="selected"' : '';
@@ -718,9 +729,20 @@
 		{
 			return ($default === TRUE) ? ' checked="checked"' : '';
 		}
-		elseif (is_array($input) && in_array($value, $input, TRUE))
+
+		$value = (string) $value;
+		if (is_array($input))
 		{
-			return ' checked="checked"';
+			// Note: in_array('', array(0)) returns TRUE, do not use it
+			foreach ($input as &$v)
+			{
+				if ($value === $v)
+				{
+					return ' checked="checked"';
+				}
+			}
+
+			return '';
 		}
 
 		return ($input === $value) ? ' checked="checked"' : '';
@@ -755,7 +777,7 @@
 			return ($default === TRUE) ? ' checked="checked"' : '';
 		}
 
-		return ($input === $value) ? ' checked="checked"' : '';
+		return ($input === (string) $value) ? ' checked="checked"' : '';
 	}
 }