Boolean из MySQL в PHP - преобразование в tinyint и сравнение - PullRequest
0 голосов
/ 05 июля 2018

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

Проверка, является ли запись истинной, всегда будет возвращать true, потому что ни одна запись не является пустой. Проверка, является ли запись 1 или 0, работает для логического значения, но когда я проверяю, 'active' == 0, она возвращает true. Почему это так и как я могу получить ложь, если сравниваю строку с tinyint?

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

1 Ответ

0 голосов
/ 05 июля 2018

Я думаю, что вы можете сделать это с помощью некоторых вложенных операторов 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)!";
    }
}
...