Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: проблема с разделителем точка при чтении xm
 
 автор: yngwie19   (23.10.2009 в 21:51)   письмо автору
 
 

здравствуйте. вот все тот же пример считываемого 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>';                           
 }

получается:

2
0

т.е видно что не правильно интерпретирует разделитель точку. В другой ветке советовали использовать функцию floatval() - с ней работает, но хотелось бы ее каждый раз не использовать, т.к реально обрабатываемый файл более сложной структуры и поэтому не хотелось бы ее каждый раз использовать чтобы считывать подобные значения. Мне еще предложили поменять локаль - с помощью setlocale(LC_NUMERIC, 'en_EN') - к сожалению безрезультатно. Подскажите есть ли другие пути решения этой проблемы?

  Ответить  
 
 автор: Саня   (23.10.2009 в 22:48)   письмо автору
 
   для: yngwie19   (23.10.2009 в 21:51)
 

> не хотелось бы ее каждый раз использовать
С чем связано это нежелание?

  Ответить  
 
 автор: yngwie19   (23.10.2009 в 23:08)   письмо автору
 
   для: Саня   (23.10.2009 в 22:48)
 

снижается удобочитаемость моего алгоритма.

  Ответить  
 
 автор: Саня   (23.10.2009 в 23:39)   письмо автору
 
   для: yngwie19   (23.10.2009 в 23:08)
 

PHP автоматически конвертирует ваш объект simplexmlelement в INT, поэтому нужно явно указать к какому типу привести данные объекта. Это делается оператором приведения типа в функциональной форме: floatval($author['i']). Как я понял, это вас не устраивает. Тогда могу предложить только каноническую форму: (float)$author['i']. Или же явное извлечение данных без преобразования типа: current($author['i']).
Так что выбирайте — либо один из описанных мною выходов, либо отказ от simplexml и поиск другого метода, который не будет так сильно гробить удобочитаемость кода.

  Ответить  
 
 автор: Trianon   (23.10.2009 в 23:25)   письмо автору
 
   для: yngwie19   (23.10.2009 в 21:51)
 

Вы не могли бы показать var_dump($xml->Books->Author) ?

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

  Ответить  
 
 автор: yngwie19   (24.10.2009 в 17:16)   письмо автору
 
   для: 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) "Адмирал" } }

  Ответить  
 
 автор: Trianon   (24.10.2009 в 18:00)   письмо автору
 
   для: yngwie19   (24.10.2009 в 17:16)
 

автоматичекски приводиться к вещественному числу этот объект не будет.
Максимум что можно предложить - руками привести его к строке:
echo ((''.$author['i']) * 2).'<br>';    

  Ответить  
 
 автор: yngwie19   (24.10.2009 в 20:56)   письмо автору
 
   для: Trianon   (24.10.2009 в 18:00)
 

скажите пожалуйста почему автоматически не будет приводиться?
echo ((''.$author['i']) * 2).'<br>';  

все равно не работает (((

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования