【问题标题】:Php is_integer returning true to string valuephp is_integer 返回 true 到字符串值
【发布时间】:2020-01-27 12:57:05
【问题描述】:

我试图弄清楚为什么最后一个元素没有被取消设置。

<?php
class Filter
{
    public static function filterNumbersFromArray(&$arr)
    {
        $i = 0;
        while($i < count($arr)){
            if(is_integer($arr[$i]) === false){
                unset($arr[$i]);
            }
            $i++;
        }
    }
}
$arr = [1, 'a', 'b', 2 , 'bb'];
Filter::filterNumbersFromArray($arr);
print_r(array_values($arr));

我得到的输出是

数组([0] => 1 [1] => 2 [2] => bb)

【问题讨论】:

    标签: php integer comparison


    【解决方案1】:

    您的值在is_integer() 中转换为int,我认为您正在寻找is_numeric()

    【讨论】:

      【解决方案2】:

      试试这个..

      class Filter
      {
      public static function filterNumbersFromArray($arr)
      {
          $res = [];
          foreach($arr as $ar)
          {
            if(is_integer($ar))
            $res[] = $ar;
          }
          return $res;
      }
      }
      
      $arr = [1, 'a', 'b', 2 , 'bb'];
      $array = Filter::filterNumbersFromArray($arr);
      print_r(array_values($array));
      

      【讨论】:

        【解决方案3】:

        试试这个。如果值为is_int,它应该通过创建新数组来工作。

        class Filter
        {
            public static function filterNumbersFromArray(&$arr)
            {
                $i = 0;
                while($i < count($arr)){
                    if(is_int($arr[$i])){
                       $newarr[] = $arr[$i];
                        // unset($arr[$i]);
                    }
                    $i++;
                }
            }
        }
        $arr = [1, 'a', 'b', 2 , 'bb'];
        Filter::filterNumbersFromArray($arr);
        print_r(array_values($newarr));
        

        输出:

        Array ( [0] => 1 [1] => 2 )
        

        【讨论】:

          【解决方案4】:

          试试这个:

          解决方案

          <?php
          class Filter
          {
              public static function filterNumbersFromArray(&$arr) {
          
                  $ints = [];
                  foreach($arr as $index) { //Loop through array and add to resultset if int
                      if (is_integer($index)) {
                          $ints[] = $index;
                      }
                  }
                  return $ints;
              }
          
          }
          
          $filter = Filter::filterNumbersFromArray([1, 'a', 'b', 2 , 'bb']); //Store new array
          print_r(array_values($filter));
          

          结果:

          Array ( [0] => 1 [1] => 2 )
          

          【讨论】:

            【解决方案5】:

            您的问题是循环中的未设置值正在更改数组数组的count,因此您实际上从未真正查看$arr[4] 来决定是否取消设置它。预先计算count,你的循环就可以工作了:

            public static function filterNumbersFromArray(&$arr)
            {
                $i = 0;
                $c = count($arr);
                while ($i < $c) {
                    if(is_integer($arr[$i]) === false){
                        unset($arr[$i]);
                    }
                    $i++;
                }
            }
            

            输出:

            Array
            (
                [0] => 1
                [1] => 2
            )
            

            Demo on 3v4l.org

            【讨论】:

              【解决方案6】:

              使用内置函数array_filteris_int

              $filtered = array_filter($array, 'is_int');
              $filtered = array_filter($array, 'is_numeric');
              $filtered = array_filter($array, 'ctype_digit');
              

              【讨论】:

                【解决方案7】:

                缩短的方法是使用array_filter

                $arr = [1, 'a', 'b', 2 , 'bb'];
                
                $res = array_filter($arr, 'is_integer');
                
                print_r($res);
                

                Result

                【讨论】:

                  猜你喜欢
                  • 2011-05-08
                  • 1970-01-01
                  • 2012-12-24
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-01-30
                  • 1970-01-01
                  • 2013-12-12
                  • 2018-05-03
                  相关资源
                  最近更新 更多