2013-10-01 4 views
1

Я очень новичок в php. Я хочу преобразовать строку в целочисленное значение.Как преобразовать строковую переменную в integer в php?

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

$val='(100*2)'; 
echo (int)($val); //This will showing output as 0 

Но echo (int)((100*2)); /This will showing output as 200

Пожалуйста, помогите мне любой, чтобы решить эту проблему .THANKS ШАГАТЬ

+1

вам придется разбирать строку - откуда она? –

+0

Почему вы даже используете его как строку? – cameronjonesweb

+0

Я объединяю значения с использованием некоторого условия для генерации формулы. Наконец, вывод получается как $ string = '((33 * 4) + (3 + 5))'; Мне нужно вычислить целочисленное значение из приведенной выше строки. – kovarthan

ответ

0

Я не рекомендуется, но вы можете использовать eval в соответствии с ваша потребность

eval('$val = (100*2)'); 
echo intval($val); 
+0

eval is evil !!! http://stackoverflow.com/questions/951373/when-is-eval-evil-in-php –

0

Почему бы не просто:

$x=intval(100);// <- or an other value from the cleaned user input 
$y=intval(2); 
$val=$x*$y; 
echo $val; 
2

(int)($val) принимает значение 0, так как значение $val «s не является числовой строкой (то есть один, который может быть непосредственно приведен к ряду).

Если вам действительно нужен этот вид функциональности, попробуйте eval():

$val='(100*2)'; 
echo (int)($val); //This will showing output as 0 
eval('$newval='.$val.';'); 
echo $newval; 

Но имейте в виду: eval() может быть опасно!

От http://php.net/manual/en/function.eval.php:

Внимание

язык конструкт Eval() очень опасно, потому что она позволяет выполнение произвольного кода PHP. Поэтому его использование не рекомендуется. Если вы тщательно проверили, что нет другого выбора, кроме как использовать эту конструкцию , обратите особое внимание на то, чтобы не передавать любые данные, предоставленные пользователем , без надлежащей проверки ее заранее.

EDIT: Добавлена ​​.';' для Eval параметра, чтобы сделать его законная инструкция PHP.

+0

Привет, я просто использовал этот следующий код. Что было запрошено с вашего конца. $ Val = '(100 * 2)'; echo (int) ($ val); // Это будет показывать вывод как 0 eval ('$ newval ='. $ Val); echo $ newval; // Это будет показывать результат как (100 * 2) echo round ($ newval); // Это будет показывать результат как 0, Но мне нужен результат как 200 вместо 0. Возможно, вы мне поможете – kovarthan

+0

Привет, 0, которое вы видите, происходит от первого эха. 'eval()' не работал, потому что я сначала пропустил точку с запятой (см. мое редактирование). Сожалею! Теперь выход будет 0200 (0 из первого эха и 200 из второго). – geomagas

0

Вы не дадите гола.

Я могу просто объяснить, почему ваш код работает так, как будто он работает.

«(100 * 2)» - это строка, которая не может быть преобразована в int, поскольку она содержит другие символы, чем числа. Каждая строка, которая не может быть преобразована, приведет к 0.

echo (int) (100 * 2) будет работать, потому что вы используете числа и строки. Не нужно было конвертировать, либо работали бы без актерского состава, просто эхо (100 * 2);

Помните, что PHP использует свободную типизацию. Вам почти не понадобится конвертировать типы. Этот сценарий очень настроен.

+0

Моя конечная цель кода используется для одной функции для создания формулы с использованием определенных правил и условий. Теперь эта функция возвращает строку формулы .here i хочу сделать эту строку целым фактическим значением. Пожалуйста, помогите мне – kovarthan

+0

кажется, что eval() - ваше последнее средство ... – mondjunge

1

Наиболее общее предложение будет - оценить вашу строку как PHP код, как:

$val = '(100*2)'; 
eval('$val = '.$val.';'); 

бут, что это небезопасно, eval следует избегать как можно дольше.

В качестве альтернативы для PHP существует bcParser. Это безопаснее, чем eval.

Наконец, я сомневаюсь, что вам действительно нужно делать такие вещи - это, кажется, вы решаете некоторые проблемы с неправильным методом (см XY-problem описания)

0

Вы можете сделать это с помощью функции PHP Eval. Для этого сначала вам нужно проверить специальные символы и символы символов.

$val='(100*2)'; 
echo matheval($val); 

function matheval($equation) 
{ 
    $equation = preg_replace("/[^0-9+\-.*\/()%]/","",$equation); 
    // fix percentage calcul when percentage value < 10 
    $equation = preg_replace("/([+-])([0-9]{1})(%)/","*(1\$1.0\$2)",$equation); 
    // calc percentage 
    $equation = preg_replace("/([+-])([0-9]+)(%)/","*(1\$1.\$2)",$equation); 
    // you could use str_replace on this next line 
    // if you really, really want to fine-tune this equation 
    $equation = preg_replace("/([0-9]+)(%)/",".\$1",$equation); 
    if ($equation == "") 
    { 
     $return = 0; 
    } 
    else 
    { 
     eval("\$return=" . $equation . ";"); 
    } 
    return $return; 
} 
Смежные вопросы