从表单提交数组中获取最高合格键后缀

问题描述 投票:0回答:4

我们有一个动态添加输入的表单。从表单提交页面,我们会得到以下结果

print_r($_POST)

['wind_1']=hk
['wind_2']=pop
etc etc 

['wind_25']=another

这里我们需要获取最后一个关键数字,即wind_n,这里:n=25

这里最后一个输入是 ['wind_25'] 这就是为什么 n=25

php arrays max text-extraction suffix
4个回答
3
投票

由于用户提供的数据应始终被视为不可信,因此在处理有效负载时,请在遵守数组键之前使用严格的验证。请记住,未经您同意,密钥可能会发生变化或重新排序。

代码:(演示

$_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)
        )
    )
);

1
投票

因此,如果返回 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;

0
投票
$i=0;
foreach($_POST as $key => $value) {
   if(strpos($key,"wind_") == 0) $i++;
}
echo $i;

0
投票
 $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
的值以及答案。

© www.soinside.com 2019 - 2024. All rights reserved.