2012-03-30 2 views
0

Я пытаюсь разобрать следующий текст в переменной ...как разобрать строку из переменной

$str = 3,283,518(10,569/2,173) 

И я использую следующий код, чтобы получить 3,283,518

$arr = explode('(',$str); 
    $num = str_replace(',','',$arr[0]); //prints 3283518 

выше $ ул динамична и иногда это может быть только 3,283,518 (означает w/o()), поэтому функция взрыва вызовет ошибку, так что лучший способ получить это значение? Благодарю.

+0

взглянуть на http://stackoverflow.com/questions/5803679/parse-math-operations-with-php –

+0

Я думаю, что OP просто хочет получить строку перед '(', ничего не связано с математикой – ajreal

ответ

3
$str = "3,283,518(10,569/2,173)"; 

preg_match("/[0-9,]+/", $str, $res); 
$match = str_replace(",", "", array_pop($res)); 

print $match; 

Это вернет 3283518, просто взяв первую часть строки $str, что состоит только из цифр и запятых. Это также будет работать только 3,283,518 или 3,283,518*10,569 и т.д.

+0

, что бы даже работать в случае '$ str = 30
*' – seoppc

+0

@seoppc Это провело бы вас меньше минуты, чтобы проверить. да, это было бы. – kba

+0

его работающий ... :) – seoppc

0

Вероятно, понадобится больше информации от вас о том, как динамический $ ул действительно, но если его только между этими значениями вы, вероятно, могли бы сделать следующее

if (strpos($str, '(') !== false) { 
    $arr = explode('(',$str); 
    $num = str_replace(',','',$arr[0]); 
} else { 
    //who knows what you want to do here. 
} 
0

Если вы действительно уверены в числовом формате, вы можете попробуйте что-то вроде: ^([0-9]+,)*([0-9]+) Используйте его с preg_match, например. Но если это не простой формат, вы должны пойти с парсером арифметических выражений.

0

Аналоговое решение:

<?php 

$str = '3,283,518(10,569/2,173)'; 

if (strstr($str, '(')) 
{ 
    $arr = explode('(',$str); 
    $num = str_replace(',','',$arr[0]); 
} 
else 
{ 
    $num = str_replace(',','',$str); 
} 

    echo $num; 

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