0

$_POST['ore']我有一个表单,可以从选择框和文本输入字段的表中发送整数。有问题的数组是:

print_r($_POST)
//returns
Array
(
[ore] => Array
    (
        [0] => 1
        [1] => 2
        [2] => 0
        [3] => 0
        [4] => 0
        [5] => 0
        [6] => 0
        [7] => 0
        [8] => 0
        [9] => 0
    )
....

这就是它变得越来越大,它是一个小应用程序。10个选择框,10个输入框。表单本身和其他功能都很好用。

while但是,在提交时,数据被发送到另一个页面,该页面处理收集的信息并基于count该数组的循环生成一个新表。但是,我只想计算大于 0 的值,因为零在技术上是空的。

我尝试了多种功能、示例、碎片,也尝试了愚蠢的运气,但没有积极的结果。我已经得到了一些部分工作,但大多数时候他们忽略了最后一行。

我目前有size = count($_POST['ore']);- 但是这会创建一个包含 10 行的表(应该如此),并用 while 代码的最后一个循环填充表中的其余行。实用,但烦人,不是我想做的。

我试过array_filter

function nonzero($var){
   return ($var > 0); }
$size = array_filter($_POST['ore'], "nonzero");

没运气。

if(isset($_POST['ore']))在多个地方尝试过,但由于数组中有一个 0 值,所以它在技术上是设置的。

那么,如何计算或过滤然后计算 $_POST['ore'] 数组值以去除 0 并仅计算或返回大于 0 的键?

我的键盘,我提前谢谢你。


编辑 - 找到答案谢谢大家一大早的反馈

function nonzero($var){
   return ($var > 0); }
$size = count(array_filter($_POST['ore'], "nonzero"));

^^ 做到了

4

4 回答 4

1

您已经尝试过:

$size = array_filter($_POST['ore], "nonzero");

这是发这篇文章时的错字还是你从代码中复制的?如果是这样,则缺少撇号。此外, $size 将是所有大于 0 的值的返回数组,因此对于您需要的大小:

$size = count(array_filter($_POST['ore'], "nonzero"));
于 2012-09-19T10:55:23.037 回答
1

如果数组中没有负元素,您实际上不需要定义过滤函数array_filter,默认情况下会过滤掉零:

$size = count(array_filter($_POST['ore']));
于 2012-09-19T10:58:58.393 回答
0

您好,请尝试取消设置值为 0 的数组的索引

foreach($array as $array_key=>$array_item)
{
  if($array[$array_key] == 0)
  {
    unset($array[$array_key]);
  }

}

希望对你有帮助

于 2012-09-19T12:48:52.983 回答
0

您的函数应该可以正常工作,您唯一必须知道的是该函数正在返回一个数组,因此:

$_POST['ore'][] = 1;
$_POST['ore'][] = 2;
$_POST['ore'][] = 0;
$_POST['ore'][] = 0;

function nonzero($var){ 
    return ($var > 0); } 

$arr = array_filter($_POST['ore'], "nonzero"); 
echo count($arr); // this returns 2
于 2012-09-19T10:59:47.510 回答