Имеется 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);
}
}
После
if (is_numeric($var)) {
поставьте
$var = 0 + $var;
P.S. is_int()
=== is_integer()
=== is_long()
и is_float()
=== is_double()
XML сам по себе не имеет поддержки описания типов данных. Поэтому все скалярные значения будут строками. Всегда.
Приводить к какому-то типу данных и его валидировать соответственно этому вы должны уже основываясь на знаниях, что именно вы хотите найти в этом документе.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Помогите решить проблемуВ начале есть цикл foreach
Fatal error: Uncaught exception 'PDOException' with message
Есть база данных в которой порядка 600 записей у записей есть дата публикации которую кто только не вводил как попалоВ результате в одной колонке...