我有一些非常难看的代码,我需要帮助来清理它。我相信一定有更好的方法。 我有一个带有条目start_doy0,start_doy1,start_doy2等的$ _POST变量。
后来的条目我没有填补,我需要找到他们填补的东西。 我不能从$ 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--;
Thnks, 马特
答案 0 :(得分: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.
答案 1 :(得分:0)
您可以使用“count”函数,如下所示:
$completed_index = count($_POST);
然后删除其他元素。例如,如果你有两个其他元素执行此操作:
$completed_index -=2;
答案 2 :(得分: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);
?>
答案 3 :(得分:0)
ALGO
$clean_post = array_filter( $_POST );
然后您可以简单地使用所有帖子值
foreach ($clean_post as $doy => $value) {
...
}
只有非空值才会保留在$clean_post
中(这可以通过PHP函数在C中更快地完成)。
-
你当前的算法:
0
ALGO
$completed_index = -1;
do {
$completed_index++;
} while ( ! empty($_POST['start_doy' . $completed_index]));
结果:$completed_index
是已完成索引的数量(如果没有,则最后一个索引为$completed_index-1
或-1
)