РЕДАКТИРОВАТЬ: Проблема (полу) исправлена. Теперь, когда я приведу строку, она становится и
Я пытаюсь получить ряд данных с сайта Steam. Одна из этих частей данных — цена.
Веб-запрос, который я делаю, возвращает что-то похожее на следующее:
class=\"market_table_value\">\r\n\t\t\t\tStarting at:<br\/>\r\n\t\t\t\t<spanstyle=\"color:white\">$9.05 USD<\/span>\r\n\t\t\t<\/span>\r\n\t\t\t<span
Это не весь возврат, но это соответствующий раздел.
Поэтому я использую следующий метод для сохранения его в массиве (поскольку запрос обычно возвращает несколько элементов)
preg_match_all('#Starting\s*at:<br/>\r\n\t\t\t\t(.*)\t\t\t</span>#siU',$res->results_html, $sor);
foreach($sor[1] as $k => $v)
$objects[$k]['price'] = $v; //str_replace('$', '', $v);
… а затем я пишу объект в файл data.json.
Вот форматирование data.json (соответствующий раздел.)
"price":"<span style=\"color:white\">$0.48<\/span>\r\n"
Проблема в том, что, когда я пытаюсь преобразовать цену в число с плавающей точкой, она возвращает 0. Вот мой код для этого раздела.
foreach($decodedfile as $datas) {
$tmp = preg_replace(array("/[^0-9,.]/"), "", $datas->price);
$ourprice = (float)$tmp;
$sql2 = ("INSERT INTO Products (FileID, FileName, FileCat, FileType, FileMethod, FilePrice) VALUES ('".$id."', '".$datas->name."', '12', 'Rifle', 'email', '".$ourprice."')");
‘$ Decodedfile’ — это просто файл json_decode’d data.json.
Итак, мой реальный вопрос: почему, когда я бросаю его на float, он становится 0?
Пытаться str_replace
удалять $
прежде чем делать регулярное выражение, затем используйте [0-9,.]+
для вашего регулярного выражения в preg_match
:
foreach($decodedfile as $datas) {
$tmp = str_replace("$","", $datas->price)
$tmp = preg_replace(array("/[0-9,.]+/"), "", $tmp);
$ourprice = (float)$tmp;
$sql2 = ("INSERT INTO Products (FileID, FileName, FileCat, FileType, FileMethod, FilePrice) VALUES ('".$id."', '".$datas->name."', '12', 'Rifle', 'email', '".$ourprice."')");
Других решений пока нет …