2015-04-25 2 views
3

Мой скрипт читает txt-файл, а затем записывает значения в таблицу базы данных. Существует поле с ценой, а в txt цена файла с 4-значными значениями имеет пробел после первой цифры (2 500 экземпляров). Я поставил эту функцию (str_replace работает хорошо и заменить «» но когда я использую его для удаления пробелов он не делает этого, и в конце концов я поставил preg_replace, но он также пропускает пробелы):Не удается удалить пробелы в строке

$model->price = preg_replace('/\s+/','',str_replace(',', '.', $row_data[3])); 

тип данных поля цен в моей таблице varchar, когда я использовал int или decimal, он пропускает цифры после пробела (2 070 становится 2, 12 015 => 12). Я должен удалить это пространство в стадии интеграции, потому что когда я выполняю операции с ценовым полем, php пропускает цифры после пробела, и у меня есть ошибки в моих дальнейших манипуляциях.

В чем проблема?

UPD Решение от @jeroen отлично работает, я изменил поле цен в десятичное (10,2) и поставить эту строку для разбора строки с ценой:

$model->price = filter_var(str_replace(',', '.', $row_data[3]), FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION); 

ответ

2

Я бы не использовать регулярное выражение, но filter для этого:

// replace if necessary 
$number = str_replace(',', '.', $row_data[3]); 

// filter unwanted characters 
$model->price = filter_var($number, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION); 

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

+0

Я могу удалить существовал, это не проблема. Должен ли я менять тип данных по цене? – Eugene

+0

@Eugene Конечно, вы можете заказать по цене или искать ценовые диапазоны в будущем, поэтому всегда предпочтительным является числовое значение. Целые числа или десятичные знаки, хотя и поплавков, приводят к ошибкам округления. – jeroen

+0

Пробелы исчезли, но теперь он удалил мой «.». от цены, такой как 35,75 стать 3575 – Eugene

0

Почему бы не использовать str_replace на пространства тоже? Было бы гораздо проще, чем регулярное выражение

str_replace(array(',', ' '), array('.', ''), $row_data[3]); 
+0

Я пробовал, никакого результата. Пробел все еще там – Eugene

Смежные вопросы