1

I have some really ugly code and I need help to clean it up. I'm sure there must be a better way. I have a $_POST variable with entries start_doy0, start_doy1, start_doy2 etc.

The later entries my not be filled and I need to find up to what doy they are filled. I cant start with $completed_index = -1 because there is no start_doy-1.

#Assume at least one line full, index 0.
$completed_index = 0;
 while (!empty($_POST['start_doy'.$completed_index]))
 {
 $completed_index++;
 }

# $_POST['start_doy'.$completed_index] was empty, decrement $completed_index.
$completed_index--;

Thnks, Matt

4

4 に答える 4

0

呼び出しコードをどれだけ変更できるか、および start_doy フィールドが順番に入力されることが保証されているかどうか (つまり、ユーザーは start_doy9 を入力できないが、start_doy2 は入力できない) に応じて、いくつかの解決策があります。

オプション 1: 次のように、フォーム フィールドが配列構文で送信されるように HTML を変更します。

One: <input type="text" name="start_doy[]"/><br/>
Two: <input type="text" name="start_doy[]"/><br/>

PHP 側では、これは配列に変換されるため、処理は次のようになります。

<?php

$completed_indexes = array();

if(isset($_POST['start_doy']))
{
    foreach($_POST['start_doy'] as $key => $start_doy)
    {
        if(false == empty($start_doy))
            $completed_indexes[] = $key;
    }
}

echo count($completed_indexes);

?>

オプション 2: または、HTML を変更できない場合、またはこのソリューションを好む場合は、配列を反復処理して、キーが必要なものと一致することを確認できます。

<?php

$completed_indexes = array();

foreach($_POST as $key => $value)
{
    if(substr($key,0,9) == "start_doy" && false == empty($value))
        $completed_indexes[] = $key;
}

echo count($completed_indexes);

?>
于 2013-02-05T08:43:17.040 に答える
0

次のように「カウント」関数を使用できます。

$completed_index = count($_POST);

次に、他の要素を削除します。たとえば、他に 2 つの要素がある場合は、次のようにします。

$completed_index -=2;
于 2013-02-05T08:18:11.590 に答える
0

アルゴ

$clean_post = array_filter( $_POST );

次に、すべての投稿値を単純に使用できます

foreach ($clean_post as $doy => $value) {
...
}

空でない値だけが残ります$clean_post(これは PHP 関数によって C でより高速に行われます)。

--

あなたの現在のアルゴリズムでは:

  • 0あなたもチェックしたいかもしれません

アルゴ

 $completed_index = -1;
 do {
   $completed_index++;
 } while ( ! empty($_POST['start_doy' . $completed_index]));

result:$completed_index完了したインデックスの数です (最後のインデックスは$completed_index-1、または-1存在しない場合) 。

于 2013-02-05T10:15:22.597 に答える
0

いくつかのブラケットを削除して に変更できますがisset、それ以外は、コードはかなりきれいに見えます。

$completed_index = 0; # assume at least one line full, index 0.
while(isset($_POST['start_doy'.$completed_index])) $completed_index++;
$completed_index--; # $_POST['start_doy'.$completed_index] was empty, decrement $completed_index.
于 2013-02-05T08:12:56.017 に答える