Joomla JInput如何过滤数组仅保留整数?
处理JInput数组输入的整数过滤问题
嘿,这个需求我之前做Joomla开发的时候碰到过,JInput本身没有直接提供数组级别的整数过滤方法,但结合PHP的原生函数完全可以轻松实现!下面给你两种常见的处理方式,按需选择:
方式一:将所有元素转为整数(兼容字符串形式的数字)
如果你的输入数组里可能混着字符串格式的数字(比如["123", 456, "abc"]),想要把它们都转成整数,非整数的可以设个默认值(比如0),可以这么写:
// 获取JInput实例 $input = JFactory::getApplication()->input; // 获取原始数组,第二个参数是默认值(空数组),第三个参数指定类型为ARRAY $rawInputArray = $input->get('your_array_param', [], 'ARRAY'); // 遍历数组,过滤并转换每个元素为整数 $sanitizedIntArray = array_map(function($item) { // 使用filter_var验证是否为整数,验证失败则返回0(可自定义默认值) return filter_var($item, FILTER_VALIDATE_INT) ?? 0; }, $rawInputArray);
方式二:只保留严格符合整数的元素
如果你的需求是直接移除非整数的元素(不管是字符串还是其他类型),只留下有效的整数(包括字符串形式的数字,之后可以转成int类型),可以用array_filter配合转换:
$input = JFactory::getApplication()->input; $rawInputArray = $input->get('your_array_param', [], 'ARRAY'); // 第一步:过滤掉非整数的元素 $filteredArray = array_filter($rawInputArray, function($item) { // 验证是否为整数,返回true的元素会被保留 return filter_var($item, FILTER_VALIDATE_INT) !== false; }); // 第二步(可选):把保留的元素统一转为int类型(比如字符串"789"转成789) $sanitizedIntArray = array_map('intval', $filteredArray);
补充说明
- JInput的
getInt()方法仅针对单个值,数组场景下需要自己遍历处理,上面的方法就是用JInput先拿到原始数组,再用PHP的过滤/转换函数处理。 - 确保前端表单的数组输入name属性是
your_array_param[]这种格式,JInput才能正确识别为数组。
内容的提问来源于stack exchange,提问作者Christoforos
相关产品推荐
相关产品推荐

