我们有一个动态添加输入的表单。从表单提交页面,我们会得到以下结果
print_r($_POST)
['wind_1']=hk
['wind_2']=pop
etc etc
['wind_25']=another
这里我们需要获取最后一个关键数字,即wind_n,这里:n=25
这里最后一个输入是 ['wind_25'] 这就是为什么 n=25
由于用户提供的数据应始终被视为不可信,因此在处理有效负载时,请在遵守数组键之前使用严格的验证。请记住,未经您同意,密钥可能会发生变化或重新排序。
代码:(演示)
$_POST = [
'wind_1' => 'hk',
'hamburger_66' => 'foo',
'wind_2' => 'pop',
'wind_25' => 'another',
'wind_13' => 'bar',
'pass_wind_99' => 'stank',
];
$n = null;
foreach ($_POST as $k => $v) {
if (sscanf($k, 'wind_%d', $windInt) && $windInt > $n) {
$n = $windInt;
}
}
var_export($n);
否则,使用正则表达式模式并对数组进行三个循环会更简洁但效率更低。
代码:(演示)
var_export(
(int) max(
preg_filter(
'/^wind_(\d+)$/',
'$1',
array_keys($_POST)
)
)
);
因此,如果返回 true,则将
wind
与 $_POST
项的键匹配,然后进一步计数,瞧,它将为您提供最后一个 wind_n
索引。
而且这段代码将为您带来在数组中包含其他 POST 变量的优势。
<?php
$_POST = array('wind_1' => 'r','wind_2' => 'r','wind_3' => 'r','wind_4' => 'r');
$i = 0;
foreach($_POST as $name => $var){
if(strpos("wind_",$name) === 0)
{
$i++;
}
}
echo $i;
$i=0;
foreach($_POST as $key => $value) {
if(strpos($key,"wind_") == 0) $i++;
}
echo $i;
$i=0;
foreach($_POST as $key=>$value)
{ if(preg_match('/^wind/',$key))
{ $i=$i+1; } }
echo $i;
此处
foreach
语句使用 $_POST
和 $key
访问 $value
中的所有键值对。 preg_match()
检查所有以 Wind 开头的键,对于每个这样的键,变量 $i
会自行递增。检查完所有键后,echo $i
打印$i
的值以及答案。