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

配列に負の要素がない場合、実際にはフィルター関数を定義する必要はありませんarray_filter。デフォルトでゼロを除外します。

$size = count(array_filter($_POST['ore']));
于 2012-09-19T10:58:58.393 に答える
1

あなたは試しました:

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

この投稿を作成するときのタイプミスですか、それともコードからコピーしたものですか? その場合、アポストロフィが欠落しています。また、 $size は、0 より大きいすべての値を含む返される配列になるため、必要なサイズについては次のようになります。

$size = count(array_filter($_POST['ore'], "nonzero"));
于 2012-09-19T10:55:23.037 に答える
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 に答える