我想将这些类型的值“3”、“2.34”、“0.234343”等转换为数字。在JavaScript中,我们可以使用Number(),但在PHP中有没有类似的方法?

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

当前回答

在任何(松散类型)语言中,您都可以通过在数字上加一个零来将字符串转换为数字。

然而,这没有什么意义,因为PHP将在使用此变量时自动执行,并且在输出时无论如何都将转换为字符串。

请注意,您可能希望将虚线保留为字符串,因为在强制转换为浮点数后,由于浮点数的性质,它可能会发生不可预测的变化。

其他回答

简单地说,你可以这样写:

<?php
    $data = ["1","2","3","4","5"];
    echo json_encode($data, JSON_NUMERIC_CHECK);
?>

好的,所以我刚刚遇到了这个问题。我的问题是所讨论的数字/字符串具有不同的位数。有些没有小数,有些有几个。所以对我来说,使用int、float、double、intval或floatval都会根据数字给出不同的结果。

所以,简单的解决方案。。。将字符串除以服务器端的1。这会将其强制为一个数字,并保留所有数字,同时修剪不必要的0。它不漂亮,但它有效。

"your number string" / 1

Input       Output
"17"        17
"84.874"    84.874
".00234"    .00234
".123000"   .123
"032"       32

有几种方法可以做到这一点:

将字符串强制转换为数字基元数据类型:$num=(int)“10”;$num=(double)“10.12”;//与(浮动)“10.12”相同;对字符串执行数学运算:$num=“10”+1;$num=地板(“10.1”);使用intval()或floatval():$num=intval(“10”);$num=浮动值(“10.1”);使用settype()。

下面是我为自己编写的一个函数:

它还返回布尔、整数、双精度和实数的简写版本。

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

类型(“3.7”,true)将返回float

类型(“500”)将返回字符串

只是要小心,因为这是一种错误检查方法,而实际变量仍然是字符串。如果需要,您需要将实际变量转换为正确的类型。我只需要它来检查数据库是否应该加载项id或别名,这样就不会产生任何意外的影响,因为它在运行时将被解析为字符串。

Edit

如果要检测对象是否为函数,请在开关中添加以下情况:

case 'object': return is_callable($mixed)?'function':'object';

您不必选择是将字符串转换为int还是float,只需在其中添加一个0,PHP就会自动将结果转换为数字类型。

// Being sure the string is actually a number
if (is_numeric($string))
    $number = $string + 0;
else // Let the number be 0 if the string is not a number
    $number = 0;