Моя база данных имеет несколько логических значений. После того, как я сохранил базу данных, логические значения были преобразованы в tinyint (1). Я думаю, это потому, что ему просто нужно сохранить 1 или 0.
Однако у меня теперь есть проблема сравнения значения в PHP. Я сохранил tinyint в массиве без кодового преобразования. Массив имеет несколько записей, которые представляют собой текст и дату, и несколько записей с булевыми элементами, например:
array[0] is '09:45:00'
array[1] is '10:45:00'
array[2] is 1
array[3] is 0
array[4] is 0
array[5] is 1
array[6] is 'active'
Теперь, если я пройду через массив, я хочу проверить, является ли значение временем, текстом или истинным/ложным.
Проверка правильности записи всегда будет возвращать значение true, поскольку ни одна запись не является пустой. Проверка того, что запись 1 или 0 работает для логического, но когда я проверяю, является ли 'active' == 0, он возвращает true. Почему это так и как я могу получить ложь, если я сравниваю строку с tinyint?
Сравнение с === не работает в любом случае.
Я думаю, что вы можете сделать это с помощью некоторых вложенных операторов if-else. Но я уверен, что есть и лучшее решение. :)
$a=array('09:45:00','10:45:00',1,0,0,1,'active',3.12);
foreach ($a as $value) {
$type= gettype($value);
if ($type == "string") {
if(strtotime ($value)){
echo "$value is 'Time' \n";
}
else{
echo "$value is 'String' \n";
}
} elseif ($type == "integer") {
if($value == 0 || $value == 1){
echo "$value is 'Boolean' \n";
}
else{
echo "$value is 'Integer' \n";
}
} else{
echo "$value is ($type)!";
}
}
1 == true
и0 == false
, использование===
- это прямая проверка (поэтому она должна соответствовать типу и т. Д.), Использование==
будет работать для вас