How do I convert a string to a number in PHP?
我想将这些类型的值
1 2 3 4 | Input Output '2' 2 '2.34' 2.34 '0.3454545' 0.3454545 |
您通常不需要这样做,因为PHP会在大多数情况下强制为您提供类型。对于您希望显式转换类型的情况,请将其强制转换:
1 2 3 | $num ="3.14"; $int = (int)$num; $float = (float)$num; |
有几种方法可以这样做:
将字符串转换为数字原始数据类型:
1 2 | $num = (int)"10"; $num = (double)"10.12"; // same as (float)"10.12"; |
对字符串执行数学运算:
1 2 |
使用
使用
在任何(松散类型)语言中,您总是可以通过向数字添加零来将字符串强制转换为数字。
但是,由于PHP在使用此变量时会自动执行此操作,因此在输出时无论如何都将转换为字符串。
请注意,您可能希望将点分号保持为字符串,因为在转换为浮动之后,由于浮点数的性质,它可能会无法预测地更改。
为避免出现问题,请尝试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php echo intval(42); // 42 echo intval(4.2); // 4 echo intval('42'); // 42 echo intval('+42'); // 42 echo intval('-42'); // -42 echo intval(042); // 34 (octal as starts with zero) echo intval('042'); // 42 echo intval(1e10); // 1410065408 echo intval('1e10'); // 1 echo intval(0x1A); // 26 (hex as starts with 0x) echo intval(42000000); // 42000000 echo intval(420000000000000000000); // 0 echo intval('420000000000000000000'); // 2147483647 echo intval(42, 8); // 42 echo intval('42', 8); // 34 echo intval(array()); // 0 echo intval(array('foo', 'bar')); // 1 ?> |
您可以使用:
1 | (int)(your value); |
或者您可以使用:
1 |
如果你想为
1 | $number = ($value == (int) $value) ? (int) $value : (float) $value; |
它有点脏,但它的工作原理。
你可以随时添加零!
1 2 3 4 | Input Output '2' + 0 2 (int) '2.34' + 0 2.34 (float) '0.3454545' + 0 0.3454545 (float) |
您无需选择是否将
1 2 3 4 5 | // 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; |
在PHP中,您可以使用
在某些情况下,只需要注意一些有用且更安全的答案。
您可能想要先检查字符串是否实际包含有效数值,然后再将其转换为数字类型(例如,如果必须操作来自将int转换为字符串的数据库的数据)。您可以使用
1 2 3 4 5 6 | $a ="whatever"; // any variable if (is_numeric($a)) var_dump(floatval($a)); // type is float else var_dump($a); // any type |
这是实现您正在寻找的功能。首先,我们检查值是否可以理解为数字,如果是,我们将其转换为int和float。如果int和float是相同的(例如,5 == 5.0),那么我们返回int值。如果int和float不相同(例如,5!= 5.3),那么我们假设您需要float的精度并返回该值。如果该值不是数字,则抛出警告并返回null。
1 2 3 4 5 6 7 8 9 10 11 12 | 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; } } |
是的,在PHP中有一个类似的方法,但是很少有人知道你很少会听到它。它是一个名为"identity"的算术运算符,如下所述:
Aritmetic Operators
要将数字字符串转换为数字,请执行以下操作:
1 | $a = +$a; |
这是我为自己简化的一个函数:
它还返回boolean,integer,double和real的简写版本。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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
type("500")将返回字符串
请注意,因为这是一种错误的检查方法,您的实际变量仍然是一个字符串。如果需要,您需要将实际变量转换为正确的类型。我只是需要它来检查数据库是否应该加载项ID或别名,因此没有任何意外的影响,因为无论如何它将在运行时被解析为字符串。
编辑
如果您想检测对象是否为函数,请将此案例添加到交换机:
1 |
除了Boykodev的回答,我建议:
1 2 3 4 | Input Output '2' * 1 2 (int) '2.34' * 1 2.34 (float) '0.3454545' * 1 0.3454545 (float) |
我发现在JavaScript中将字符串转换为数字的简单方法是将其乘以1.它解决了连接问题,因为"+"符号在JavaScript中有多种用法,而"*"符号纯粹是用于数学乘法。
基于我在这里看到的有关PHP自动愿意将包含数字的字符串解释为数字(以及关于添加的注释,因为在PHP中"+"纯粹用于数学加法),这个乘法技巧工作得很好对于PHP,也是。
我测试了它,它确实有效......虽然取决于你如何获取字符串,你可能想要在它乘以1之前应用trim()函数。
你可以这样写:
1 2 3 4 |
1 2 3 | $a ="10"; $b = (int)$a; |
您可以使用它将字符串转换为PHP中的int。
您可以使用:
1 | ((int) $var) ( but in big number it return 2147483647 :-) ) |
但最好的解决方案是使用:
1 2 3 4 |
要么
1 2 3 4 |
PHP将在限制范围内为您完成
1 2 3 4 5 6 7 |
所有建议都会丢失数字类型。
在我看来这是一个最好的做法:
1 2 3 4 5 6 7 |
您可以按如下方式更改数据类型
1 2 3 4 5 6 7 8 9 |
由于历史原因,在浮动的情况下返回"double"。
PHP文档
有一种方法:
1 | $value = json_decode(json_encode($value, JSON_NUMERIC_CHECK|JSON_PRESERVE_ZERO_FRACTION|JSON_UNESCAPED_SLASHES), true); |
使用
使用
1 2 3 4 5 |
将输出:
我得到了一个问题"你说你正在编写用于在PHP中将字符串转换为字符串的内置函数,在编程访谈中如何编写该函数"。这是一个解决方案。
1 2 3 4 5 6 7 8 | $nums = ["0","1","2","3","4","5","6","7","8","9"]; $int = 15939; $string =""; while ($int) { $string .= $nums[$int % 10]; $int = (int)($int / 10); } $result = strrev($string); |
我一直在阅读答案,并没有看到有人提到PHP的数字转换中最大的警告。
最受欢迎的答案建议执行以下操作:
1 2 | $str ="3.14" $intstr = (int)$str // now it's a number equal to 3 |
太精彩了。 PHP确实直接投射。但是,如果我们做了以下怎么办?
1 2 | $str ="3.14is_trash" $intstr = (int)$str |
PHP认为此类转换有效吗?
显然是的。
PHP读取字符串,直到找到所需类型的第一个非数字字符。这意味着对于整数,数字字符是[0-9]。结果,它读取
如果您要转换为浮动或双倍,也会发生同样的情况。 PHP将读取
因此,
也可以看看:
https://www.php.net/manual/en/language.operators.comparison.php比较时如何进行转换
https://www.php.net/manual/en/language.types.string.php#language.types.string.conversion如何将字符串转换为相应的数字
不同的方法: