我试图检测一个或多个变量是否包含数字。我尝试过几种不同的方法,但我还没有完全成功。
这是我试过的。
<?php
$one = '1';
$two = '2';
$a1 = '3';
$a2 = '4';
$a3 = '5';
$string_detecting_array = array();
array_push($string_detecting_array, $one,$two,$a1,$a2,$a3);
foreach ($string_detecting_array as $key) {
if (is_numeric($key)) {
echo 'Yes all elements in array are type integer.';
}
else {
echo "Not all elements in array were type integer.";
}
}
?>
我没有成功使用这种方法。有任何想法吗?谢谢你提前!
答案 0 :(得分:6)
首先,您的循环逻辑是错误的:您应该在达到判决之前处理所有数组中的项目。最短(但不是最明显)的方法是使用
$allNumbers = $array == array_filter($array, 'is_numeric');
这是有效的,因为array_filter
保留了密钥,comparing arrays with ==
检查了元素计数,键,和值(这里的值是原语,因此可以进行简单的比较)。< / p>
更普通的解决方案是
$allNumbers = true;
foreach ($array as $item) {
if (!is_numeric_($item)) {
$allNumbers = false;
break;
}
}
// now $allNumbers is either true or false
关于过滤功能:如果您只想允许字符0
到9
,则需要使用ctype_digit
,但需要注意的是这不允许使用减号前面。
is_numeric
将允许标记,但它也将允许浮点数和十六进制。
gettype
在这种情况下不起作用,因为您的数组包含数字字符串,而不是数字。
答案 1 :(得分:5)
如果您想明确知道变量是否为数字,则可以使用gettype
。使用is_numeric
不会尊重类型。
如果您打算使用is_numeric
但想知道所有元素是否属于,请按以下步骤操作:
$all_numeric = true;
foreach ($string_detecting_array as $key) {
if (!(is_numeric($key))) {
$all_numeric = false;
break;
}
}
if ($all_numeric) {
echo 'Yes all elements in array are type integer.';
}
else {
echo "Not all elements in array were type integer.";
}
答案 2 :(得分:3)
您可以使用array_map
链接array_product
以获得单行表达式:
if (array_product(array_map('is_numeric', $string_detecting_array))) {
echo "all values are numeric\n";
} else {
echo "not all keys are numeric\n";
}
答案 3 :(得分:1)
使用gettype()
答案 4 :(得分:1)
您可以使用:
$set = array(1,2,'a','a1','1');
if(in_array(false, array_map(function($v){return is_numeric($v);}, $set)))
{
echo 'Not all elements in array were type integer.';
}
else
{
echo 'Yes all elements in array are type integer.';
}
答案 5 :(得分:0)
你必须设置一个标志并查看所有项目。
$isNumeric = true;
foreach ($string_detecting_array as $key) {
if (!is_numeric($key)) {
$isNumeric = false;
}
}
if ($isNumeric) {
echo 'Yes all elements in array are type integer.';
}
else {
echo "Not all elements in array were type integer.";
}
答案 6 :(得分:0)
您可以创建自己的批量测试功能。它可能是您的实用程序类的静态函数!
/**
* @param array $array
* @return bool
*/
public static function is_all_numeric(array $array){
foreach($array as $item){
if(!is_numeric($item)) return false;
}
return true;
}