Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP初始化/验证整数数组_Php_Arrays_Validation_Integer_Sanitization - Fatal编程技术网

PHP初始化/验证整数数组

PHP初始化/验证整数数组,php,arrays,validation,integer,sanitization,Php,Arrays,Validation,Integer,Sanitization,我有下面的数组,想知道验证和调整数组大小的最佳方法是什么,以确保只允许整数 if(is_array($_POST['taxonomy'])) { $term_ids = array_map('esc_attr', $_POST['taxonomy']); } 打印时看起来是这样的: Array ( [0] => 13 [1] => 12 ) 我知道esc_attr不是很安全,所以我想再加强一点 任何帮助都会很好 干杯 Dave因为它是$\u POST数据,

我有下面的数组,想知道验证和调整数组大小的最佳方法是什么,以确保只允许整数

if(is_array($_POST['taxonomy'])) {
    $term_ids = array_map('esc_attr', $_POST['taxonomy']);
}
打印时看起来是这样的:

Array
(
    [0] => 13
    [1] => 12
)
我知道esc_attr不是很安全,所以我想再加强一点

任何帮助都会很好

干杯


Dave

因为它是
$\u POST
数据,所以您需要检查(即仅包含数字的字符串):

请注意,这只是丢弃非数值

if(is_array($_POST['taxonomy'])) {
    $term_ids = array_map('intval', $_POST['taxonomy']);
}

我们应该做到这一点。注意:这是卫生设施。更多信息:

另一种选择是使用phps功能:

$array = array(
  13, 12, '1', 'a'
);

$result = filter_var($array, FILTER_VALIDATE_INT, array(
  'flags'   => FILTER_REQUIRE_ARRAY,
  'options' => array('min_range' => 1)
));

var_dump($result);

/*
array(4) {
  [0]=>
  int(13)
  [1]=>
  int(12)
  [2]=>
  int(1)
  [3]=>
  bool(false)
}
*/

如果您正在寻找一个衬板,以根据指定条件进行检查,您可以使用:

$onlyIntegers=Arr::check($_POST['taxonomy'],'ctype_digit');
假设您的
$\u POST['taxonomy']
可以像@deceze建议的那样包含数字字符串,或者只是简单的:

$onlyIntegers=Arr::check($_POST['taxonomy'],'is_int');
如果您确定
$\u POST['taxonomy']
值实际上应该是整数


Arr::check
方法是其中的一部分,它包含各种方法来帮助您处理不同类型的数组。

无论发生什么情况,都将它们转换为int…如果它是一个字符串,我只会使用(int),但是否有类似的方法用于数组?感谢您的回复您对循环中的数组值执行此操作,只需将它们强制转换并映射到int。POST数据从来都不是
int
,而是字符串。这看起来像数字:数组([0]=>13[1]=>12)是的,但它们是字符串,而不是
int
s。只是尝试了一下,它似乎可以立即工作,谢谢大家的评论,非常有帮助!但这有多安全?如果有人向这个数组中注入了什么东西?(我们在黑客方面遇到了一些问题,因此我将检查所有代码并堵塞所有漏洞)。欢迎使用此选项,您可以确保
$sanitizedValues
仅包含仅包含数字的字符串。没有更多,没有更少。非常好,非常干净。干杯@deceze和其他发布回复的人。很好。正是我想要的。荣誉。更详细,但技术上更合适+1:)对不起,伙计们,这两者有什么区别?如果你只验证一个字段,我想这只是品味的问题。不过,如果您有很多验证过滤器函数的工作,则可以节省一些工作(请参见示例)。我想,如果你或其他人必须在3个月后理解你在做什么,过滤函数会更清楚地显示发生了什么。目前它只是一个输入。我已经检查了filter\u input\u数组,它看起来非常有用!我也会+1这个答案,非常感谢@Yoshi的帮助和建议。每天都是上学的日子:-)
if(is_array($_POST['taxonomy'])) {
    $term_ids = array_map('intval', $_POST['taxonomy']);
}
$array = array(
  13, 12, '1', 'a'
);

$result = filter_var($array, FILTER_VALIDATE_INT, array(
  'flags'   => FILTER_REQUIRE_ARRAY,
  'options' => array('min_range' => 1)
));

var_dump($result);

/*
array(4) {
  [0]=>
  int(13)
  [1]=>
  int(12)
  [2]=>
  int(1)
  [3]=>
  bool(false)
}
*/