Определение типа значения в строке из XML

253
06 марта 2017, 13:25

Имеется XML документ, из него идет парсинг значений полей и далее необходимо узнать тип значения записанный в строковой переменной. Для определения типа значения в переменной написал такую функцию.

public function getTypeValue($var) {
    if (is_numeric($var)) {
        if (is_int($var)) {
            return 'int';
        }elseif (is_integer($var)){
            return 'integer';
        }elseif (is_long($var)){
            return 'long';
        }elseif (is_float($var)){
            return 'float';
        }elseif (is_double($var)){
            return 'double';
        }else{
            return "len: " . strlen($var);
        }
    }else{
        return 'string';
    }
}

Как ни крути, там где строки, выдает string, там где числа (014982, 2, 3, 3.1.3 и т.п.) функция выдает информацию по длинне строки но не тип. Блок else для чисел сделал для проверки нет ли посторонних символов в строке, которые бы мешали. По результатам видно что ничего постороннего там нету. Если взять обычный массив и заполнить данными то функция отрабатывает верно, то есть определяет и строки и числа разного типа. Как побороть ситуацию?

Код обработки XML:

public function parse() {       
    $fullpath = PATH_XMLFOLDER . "/linecheck.xml";
    $xml = simplexml_load_file($fullpath);
    $fields = $xml->xpath('//fields/*');
    foreach ($fields as $field) {
        $fieldName = (string)$field->getName();
        $value = (string)$field;
        $typeValue = $this->getTypeValue($value);           
        SVTools::sv_debug($value,0);
        SVTools::sv_debug($typeValue,0);
    }
}
Answer 1

После

if (is_numeric($var)) {

поставьте

   $var = 0 + $var;

P.S. is_int() === is_integer() === is_long() и is_float() === is_double()

Answer 2

XML сам по себе не имеет поддержки описания типов данных. Поэтому все скалярные значения будут строками. Всегда.

Приводить к какому-то типу данных и его валидировать соответственно этому вы должны уже основываясь на знаниях, что именно вы хотите найти в этом документе.

READ ALSO
Параметры query_posts

Параметры query_posts

Использую следующий код, чтобы выводить посты из custom post type

279
PHP Warning: Invalid argument supplied for foreach() in

PHP Warning: Invalid argument supplied for foreach() in

Помогите решить проблемуВ начале есть цикл foreach

315
Is not allowed to connect to this MariaDB server

Is not allowed to connect to this MariaDB server

Fatal error: Uncaught exception 'PDOException' with message

435
Как с PHP привести все даты к одному формату?

Как с PHP привести все даты к одному формату?

Есть база данных в которой порядка 600 записей у записей есть дата публикации которую кто только не вводил как попалоВ результате в одной колонке...

370