Boolean из MySQL в PHP - преобразование в tinyint и сравнение

0

Моя база данных имеет несколько логических значений. После того, как я сохранил базу данных, логические значения были преобразованы в 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?

Сравнение с === не работает в любом случае.

  • 2
    1 == true и 0 == false , использование === - это прямая проверка (поэтому она должна соответствовать типу и т. Д.), Использование == будет работать для вас
  • 0
    К сожалению, он также возвращает true, если я проверяю 'active' == 0
Показать ещё 3 комментария
Теги:
mysqli
boolean

1 ответ

1
Лучший ответ

Я думаю, что вы можете сделать это с помощью некоторых вложенных операторов 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)!";
    }
}
  • 0
    Проверка, является ли значение if, которое должно сравниваться, is_numeric, работает довольно хорошо как обходной путь. Тем не менее, мне интересно, почему 0 == 'строка' это правда ...
  • 0
    Вы можете найти ответ на свой вопрос здесь: stackoverflow.com/questions/6843030/…
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню