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"' : '';
 	}
 }
 
diff --git a/system/libraries/Form_validation.php b/system/libraries/Form_validation.php
index 8b9bfa8..5ea2f81 100644
--- a/system/libraries/Form_validation.php
+++ b/system/libraries/Form_validation.php
@@ -898,12 +898,19 @@
 		}
 
 		$field = $this->_field_data[$field]['postdata'];
+		$value = (string) $value;
 		if (is_array($field))
 		{
-			if ( ! in_array($value, $field))
+			// Note: in_array('', array(0)) returns TRUE, do not use it
+			foreach ($field as &$v)
 			{
-				return '';
+				if ($value === $v)
+				{
+					return ' selected="selected"';
+				}
 			}
+
+			return '';
 		}
 		elseif (($field === '' OR $value === '') OR ($field !== $value))
 		{
@@ -934,12 +941,19 @@
 		}
 
 		$field = $this->_field_data[$field]['postdata'];
+		$value = (string) $value;
 		if (is_array($field))
 		{
-			if ( ! in_array($value, $field))
+			// Note: in_array('', array(0)) returns TRUE, do not use it
+			foreach ($field as &$v)
 			{
-				return '';
+				if ($value === $v)
+				{
+					return ' checked="checked"';
+				}
 			}
+
+			return '';
 		}
 		elseif (($field === '' OR $value === '') OR ($field !== $value))
 		{