Как мне преобразовать строку в число в PHP? - PullRequest
545 голосов
/ 16 декабря 2011

Я хочу преобразовать значения этих типов, '3', '2.34', '0.234343' и т. Д. В число.В JavaScript мы можем использовать Number(), но есть ли подобный метод в PHP?

Input             Output
'2'               2
'2.34'            2.34
'0.3454545'       0.3454545

Ответы [ 25 ]

9 голосов
/ 01 января 2016

Вот функция, которая достигает того, что вы ищете. Сначала мы проверяем, можно ли понимать значение как число, если это так, мы превращаем его в int и float. Если int и float одинаковы (например, 5 == 5.0), мы возвращаем значение int. Если int и float не совпадают (например, 5! = 5.3), тогда мы предполагаем, что вам нужна точность float и возвращаем это значение. Если значение не является числовым, мы выдаем предупреждение и возвращаем ноль.

function toNumber($val) {
    if (is_numeric($val)) {
        $int = (int)$val;
        $float = (float)$val;

        $val = ($int == $float) ? $int : $float;
        return $val;
    } else {
        trigger_error("Cannot cast $val to a number", E_USER_WARNING);
        return null;
    }
}
7 голосов
/ 10 мая 2018

Да, в PHP есть похожий метод, но он настолько мало известен, что вы редко будете слышать об этом. Это арифметический оператор с именем " identity ", как описано здесь:

Арифметические операторы

Чтобы преобразовать числовую строку в число, выполните следующие действия:

$a = +$a;
6 голосов
/ 25 февраля 2014

Я обнаружил, что в JavaScript простой способ преобразовать строку в число - это умножить ее на 1. Это решает проблему конкатенации, потому что символ "+" имеет многократное использование в JavaScript, а символ "*" Символ предназначен исключительно для математического умножения.

Исходя из того, что я видел здесь относительно того, что PHP автоматически готов интерпретировать содержащую цифры строку как число (и комментарии о добавлении, поскольку в PHP "+" предназначен исключительно для математического сложения), этот трюк умножения прекрасно работает и для PHP.

Я проверил это, и оно работает ... Хотя в зависимости от того, как вы получили строку, вы можете применить к ней функцию trim (), прежде чем умножить на 1.

6 голосов
/ 03 октября 2016

В дополнение к ответ Бойкодева Я предлагаю это:

Input             Output
'2' * 1           2 (int)
'2.34' * 1        2.34 (float)
'0.3454545' * 1   0.3454545 (float)
6 голосов
/ 24 января 2014

Вот функция, которую я написал, чтобы упростить для себя вещи:

Она также возвращает сокращенные версии логических, целых, двойных и вещественных чисел.

function type($mixed, $parseNumeric = false)
{        
    if ($parseNumeric && is_numeric($mixed)) {
        //Set type to relevant numeric format
        $mixed += 0;
    }
    $t = gettype($mixed);
    switch($t) {
        case 'boolean': return 'bool'; //shorthand
        case 'integer': return 'int';  //shorthand
        case 'double': case 'real': return 'float'; //equivalent for all intents and purposes
        default: return $t;
    }
}

Тип вызова с parseNumeric, установленным вtrue будет преобразовывать числовые строки перед проверкой типа.

Таким образом:

type ("5", true) вернет int

type ("3.7", true) вернетТип float

("500") вернет строку

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

Редактировать

Если вы хотите определить, являются ли объекты функциями, добавьте этот случай в коммутатор:

case 'object': return is_callable($mixed)?'function':'object';
5 голосов
/ 28 августа 2018

Просто вы можете написать так:

<?php
    $data = ["1","2","3","4","5"];
    echo json_encode($data, JSON_NUMERIC_CHECK);
?>
4 голосов
/ 16 декабря 2011
$a = "10";

$b = (int)$a;

Вы можете использовать это для преобразования строки в int в PHP .

4 голосов
/ 29 сентября 2013

Вы можете использовать:

((int) $var)   ( but in big number it return 2147483647 :-) )

Но лучшее решение - использовать:

if (is_numeric($var))
    $var = (isset($var)) ? $var : 0;
else
    $var = 0;

Или

if (is_numeric($var))
    $var = (trim($var) == '') ? 0 : $var;
else
    $var = 0;
2 голосов
/ 04 сентября 2013

Вы можете изменить тип данных следующим образом

$number = "1.234";

echo gettype ($number) . "\n"; //Returns string

settype($number , "float");

echo gettype ($number) . "\n"; //Returns float

По историческим причинам "double" возвращается в случае с плавающей запятой.

Документация PHP

2 голосов
/ 29 апреля 2015

Все предложения теряют числовой тип.

Мне кажется, это лучшая практика:

function str2num($s){
// Returns a num or FALSE
    $return_value =  !is_numeric($s) ? false :               (intval($s)==floatval($s)) ? intval($s) :floatval($s);
    print "\nret=$return_value type=".gettype($return_value)."\n";
}
...