【问题标题】:Removing non-integer entries from an array从数组中删除非整数条目
【发布时间】:2022-01-26 08:05:24
【问题描述】:

我有一个这样的 PHP 数组:

array( [0] => 1
       [1] => 2
       [2] => 3
       [3] => Some strings
)

如何从数组中删除不是整数的条目?我需要输出这个:

array( [0] => 1
       [1] => 2
       [2] => 3
)

谁能给我一个线索?

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    array_filteris_int 一起使用

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

    编辑:

    如 cmets 中所述,使用以下方法之一可能是更好的解决方案。

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

    【讨论】:

    • 很好,不知道array_filter。
    • 感谢您的回复。 array_filter 将所有条目检测为字符串。如何将整数条目转换为整数?
    • 你可以看看is_numeric而不是is_int
    • 解决方法:$filtered = array_filter($array, 'is_numeric');
    • ctype_digit 可能比 is_numeric 更合适
    【解决方案2】:

    如果您正在使用来自$_POST$_GET 的输入,则以下各项均存在问题。

    • array_filter($array, 'is_numeric') 也将接受小数值,例如。 2.5
    • array_filter($array, 'is_int'); 将拒绝大多数 int 输入,因为发布在 $_GET$_POST 上的值被视为字符串,即使它们包含有效的 integers
    • 如果输入包含有效的integersarray_filter($array, 'ctype_digit'); 将拒绝输入,因为它只匹配表示为字符串的整数。

    因此,仅针对有效整数过滤数组的最安全方法是

    array_filter($ids, function($e){ return ctype_digit( (string) $e );})
    

    【讨论】:

      【解决方案3】:

      【讨论】:

        【解决方案4】:

        如果您正在清理数据库,请尝试

        $int_array = array_map('intval', $array);
        

        所有内容都将被清理为整数,但错误的转换将为 0

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多