检查PHP中的值是否为整数

时间:2016-07-17 02:03:46

标签: php

我正在研究一个项目,在那个项目中我有两个目标

  1. 我从用户
  2. 接收数据
  3. 我检查用户发送的数据是interger还是整数,如果小于1
  4. 所以我写了这段代码

    <form action="" method="get">
        <input type="text" name="quantity" value="2"/>
        <input type="submit"/>
    </form>
    
    <?php
    if (!is_int($_GET['quantity']) || $_GET['quantity'] < 1){
        $_GET['quantity'] = 1;
    }
    
    echo $_GET['quantity'];
    

    我面临的问题是,即使数据小于1或者根本不是整数,程序也总是回显1

    请帮我解决这个问题

5 个答案:

答案 0 :(得分:2)

尝试替换

if (!is_int($_GET['quantity']) || $_GET['quantity'] < 1){

$quantity = (int) $_GET['quantity'];

if ($quantity < 1) {...}

这会将其转换为整数,如果不是整数,则将其强制转换为0.然后比较它是否为&lt; 1或不,并且应该具有您想要的结果。

答案 1 :(得分:1)

问题是,'数量'实际上是一个字符串。所以当你打电话时

is_int($_GET["quantity"))

它总是返回false,因为它是string类型。

最简单的解决方案是将'数量'转换为int。

is_int((int) $_GET["quantity")

答案 2 :(得分:1)

希望这会对您有所帮助

$quantity = $_GET['quantity'];
if (!is_numeric($quantity) || $quantity < 1)
{
   $quantity = 1;
}

echo $quantity;

答案 3 :(得分:0)

试试这个会起作用

from pyspark.sql import SQLContext
from pyspark import SparkConf, SparkContext
from pyspark.ml.recommendation import ALS
from pyspark.ml.tuning import CrossValidator, ParamGridBuilder
from pyspark.ml.evaluation import RegressionEvaluator
from math import sqrt

from operator import add

conf = (SparkConf()
         .setMaster("local[4]")
         .setAppName("Myapp")
         .set("spark.executor.memory", "2g"))
sc = SparkContext(conf = conf)

sqlContext = SQLContext(sc)
def computeRmse(data):
    return (sqrt(data.map(lambda x: (x[2] - x[3]) ** 2).reduce(add) / float(data.count())))

dfRatings = sqlContext.createDataFrame([(0, 0, 4.0), (0, 1, 2.0), (1, 1, 3.0), (1, 2, 4.0), (2, 1, 1.0), (2, 2, 5.0)],
                                 ["user", "item", "rating"])

lr1 = ALS()
grid1 = ParamGridBuilder().addGrid(lr1.regParam, [1.0,0.005,2.0]).build()
evaluator1 = RegressionEvaluator(predictionCol=lr1.getPredictionCol(),labelCol=lr1.getRatingCol(), metricName='rmse')
cv1 = CrossValidator(estimator=lr1, estimatorParamMaps=grid1, evaluator=evaluator1, numFolds=2)
cvModel1 = cv1.fit(dfRatings)
a=cvModel1.transform(dfRatings)
print ('rmse with cross validation: {}'.format(computeRmse(a)))

for reg_param in (1.0,0.005,2.0):
    lr = ALS(regParam=reg_param)
    model = lr.fit(dfRatings)
    print ('reg_param: {}, rmse: {}'.format(reg_param,computeRmse(model.transform(dfRatings))))

答案 4 :(得分:0)

您可以创建一个函数来获取输入的整数值。

function strtonumber($string = "") {
    $num = intval($string);
    if ($num === 0) {
        $num = preg_replace("/[^0-9]/", "", $string);
        $num = intval($num);
    }
    return $num;
}

$quantity = strtonumber($_GET["quantity"]);

if ($quantity < 1) {
    $quantity = 1
}

intval返回输入的整数值。

echo intval("12ab"); // 12

但如果数字在字母后面,则返回0

echo intval("ab12"); // 0

在这种情况下,要从12获取"ab12",我们会移除所有非数字字符并再次获取整数值。

该函数将始终返回一个整数,因此您无需检查输入是否为整数。