【问题标题】:Check if any number in the array is not a int [duplicate]检查数组中的任何数字是否不是 int [重复]
【发布时间】:2013-02-16 18:34:06
【问题描述】:

我制作了一个表格,例如,您可以发送号码

1 2 3 4 5 6 7 8 9 10

然后我编写了一个 PHP 代码,它将在一个数组和循环中获取这些数字,该循环将计算有多少数组项,然后进行计算。

我使用 is_numeric 检查数组是否只包含整数。 但由于某种原因,它并没有真正起作用。

<?php
$total = null;
$number = $_POST['number'];
$numbers = explode(" ", $number);
foreach($numbers as $number) {
$total = $total + $number;
}
$notnumber = '<center>You must enter a number</center>';
$empty = '<center>The field is empty.</center>';

if ($numbers == is_numeric($numbers) && $total != null) {
    $avg = $total / $number;
    echo '<center>Avarge is:  <b>'.$avg.'</b></center>';
    } else if ($_POST['number'] == "") {
    echo $empty;        
    } else if ($numbers != is_numeric($numbers)) {
    echo $notnumber;
    }
?>

这是表格

<form action="index.php" method="post">
<input type="text" name="number" class="input"><br /><br />
<input type="submit" value="Calculate results">
</form>

会发生什么:

当我输入数字时,它会回显错误“$notnumbers”但它们是数字。 我做错了什么?

谢谢。

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    if($numbers == is_numeric($numbers) ... 不正确

    使用

    if (is_numeric($numbers) && $total != null) {
    

    更好的功能是ctype_digit

    请试试这个,不要使用你的!

    //$_POST['number'] = '1 2 3 4 5 6 7 8 9 10';
    $notnumber = '<center>You must enter a number</center>';
    $empty = '<center>The field is empty.</center>';
    
    
    if(!isset($_POST['number']) || strlen($_POST['number']) <= 0){
     echo $empty;
    }
    else{
     if( !preg_match('/^([1-9]{1})([0-9]*)(\s)([0-9]+)/', $_POST['number']) ){
        echo $notnumber;
     }else{
        $total = null;
        $number = $_POST['number'];
        $numbers = explode(" ", $number);
        //remove after test
        echo "<pre>";
        print_r($numbers);
        echo "</pre>";
        //end remove
        $total = array_sum($numbers);
        //count(array) = number of elements inside $array
        $avg = $total / count($numbers);
        echo '<center>Avarge is:  <b>'.$avg.'</b></center>';
     }
    }
    

    【讨论】:

    • 由于某种原因,它似乎根本不影响代码。
    • 将数字更改为 $number 并且有效。
    • $number 只是您用于计算平均值的用户输入!!!不正确
    【解决方案2】:

    这是不正确的:$numbers == is_numeric($numbers)

    替代解决方案:
    您可以试试这个,前提是您将 0 视为无效号码。

    $number = $_POST['number'];
    $numbers = explode(" ", $number);
    $total = 0;
    foreach($numbers as &$number) {
    
        // covert value to integer
        // any non-numerics become 0
        $number = (int) $number;
        $total += $number;
    
    }
    

    现在您不必担心检查is_numericis_int,因为它们都是整数。您只需检查 0 值即可。

    额外提示:
    &lt;center&gt; 标签在 HTML 中也已弃用。
    CSS 应该用于显示居中文本。

    【讨论】:

      【解决方案3】:

      试试这个我解决了一些代码问题

       <?php
       $total = NULL;
       $number = @$_POST['number'];
       $numbers = explode(" ", $number);
       $Num=0;
       foreach($numbers as $number) {
         $total = $total + $number;
         $Num++;
       }
       $notnumber = '<center>You must enter a number</center>';
       $empty = '<center>The field is empty.</center>';
       if (is_array($numbers) && $total != NULL) {
           $avg = $total / $Num;
           echo '<center>Avarge is:  <b>'.$avg.'</b></center>';
           } else if (!isset($_POST['number'])) {
              echo $empty;        
           } else if (!is_numeric($number)) {
              echo $notnumber;
           }
      

      【讨论】:

        猜你喜欢
        • 2012-11-19
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 2021-05-02
        • 2020-07-08
        • 2019-05-11
        • 2018-11-15
        • 1970-01-01
        相关资源
        最近更新 更多