1

我有一些非常丑陋的代码,我需要帮助来清理它。我相信一定有更好的方法。我有一个 $_POST 变量,其中包含条目 start_doy0、start_doy1、start_doy2 等。

后面的条目我没有填写,我需要找出他们填写的内容。我不能从 $completed_index = -1 开始,因为没有 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--;

谢谢,马特

4

4 回答 4

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 回答
0

您可以像这样使用“计数”功能:

$completed_index = count($_POST);

然后删除其他元素。例如,如果您有两个其他元素,请执行以下操作:

$completed_index -=2;
于 2013-02-05T08:18:11.590 回答
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

算法

$clean_post = array_filter( $_POST );

那么您可以简单地使用所有帖子值

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

只有非空值会保留$clean_post(这在 C 中通过 PHP 函数更快地完成)。

--

在您当前的算法中:

  • 0您可能还想检查

算法

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

结果:$completed_index是已完成索引的数量(最后一个索引是$completed_index-1-1如果没有)

于 2013-02-05T10:15:22.597 回答