|
|
|
| здравствуйте. вот все тот же пример считываемого xml файла
<?xml version="1.0" encoding="utf-8" ?>
<Books>
<Author i="1.1523" title="Аврора" />
<Author i="0.75" title="Адмирал" />
</Books>
|
допустим что мне нужно считать значение параметра i и умножить его на 2. Делаю так:
foreach($xml->Books->Author as $author)
{
echo ($author['i'] * 2).'<br>';
}
|
получается:
т.е видно что не правильно интерпретирует разделитель точку. В другой ветке советовали использовать функцию floatval() - с ней работает, но хотелось бы ее каждый раз не использовать, т.к реально обрабатываемый файл более сложной структуры и поэтому не хотелось бы ее каждый раз использовать чтобы считывать подобные значения. Мне еще предложили поменять локаль - с помощью setlocale(LC_NUMERIC, 'en_EN') - к сожалению безрезультатно. Подскажите есть ли другие пути решения этой проблемы? | |
|
|
|
|
|
|
|
для: yngwie19
(23.10.2009 в 21:51)
| | > не хотелось бы ее каждый раз использовать
С чем связано это нежелание? | |
|
|
|
|
|
|
|
для: Саня
(23.10.2009 в 22:48)
| | снижается удобочитаемость моего алгоритма. | |
|
|
|
|
|
|
|
для: yngwie19
(23.10.2009 в 23:08)
| | PHP автоматически конвертирует ваш объект simplexmlelement в INT, поэтому нужно явно указать к какому типу привести данные объекта. Это делается оператором приведения типа в функциональной форме: floatval($author['i']). Как я понял, это вас не устраивает. Тогда могу предложить только каноническую форму: (float)$author['i']. Или же явное извлечение данных без преобразования типа: current($author['i']).
Так что выбирайте — либо один из описанных мною выходов, либо отказ от simplexml и поиск другого метода, который не будет так сильно гробить удобочитаемость кода. | |
|
|
|
|
|
|
|
для: yngwie19
(23.10.2009 в 21:51)
| | Вы не могли бы показать var_dump($xml->Books->Author) ?
Потому как то, что Вы излагаете, опытным путем не подтверждается.
У меня во всяком случае. | |
|
|
|
|
|
|
|
для: Trianon
(23.10.2009 в 23:25)
| |
object(SimpleXMLElement)#4 (1) { ["@attributes"]=> array(2) { ["i"]=> string(6) "1.1523" ["title"]=> string(12) "Аврора" } } object(SimpleXMLElement)#5 (1) { ["@attributes"]=> array(2) { ["i"]=> string(4) "0.75" ["title"]=> string(14) "Адмирал" } }
|
| |
|
|
|
|
|
|
|
для: yngwie19
(24.10.2009 в 17:16)
| | автоматичекски приводиться к вещественному числу этот объект не будет.
Максимум что можно предложить - руками привести его к строке:
echo ((''.$author['i']) * 2).'<br>';
|
| |
|
|
|
|
|
|
|
для: Trianon
(24.10.2009 в 18:00)
| | скажите пожалуйста почему автоматически не будет приводиться?
echo ((''.$author['i']) * 2).'<br>';
|
все равно не работает ((( | |
|
|
|