dongsheng4679 2018-06-28 11:14
浏览 62
已采纳

如何使用php获取提交表单中的密钥部分

we have a form in which input added dynamically . In form submit page we will get the following result

print_r($_POST)

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

['wind_25']=another

so here we need to get the last key number , that is wind_n , here n=25

here the last input is ['wind_25'] that's why n=25

Please help .

  • 写回答

4条回答 默认 最新

  • dqc18251 2018-06-28 12:40
    关注

    Using regex seems unnecessary here unless you need to perform fullstring validation.

    It seems that you are only checking the static leading characters, so strpos() is the most efficient call.

    I am saving each found key instead of using a counter.

    When the loop finishes, I extract the integer from the last key.

    Code: (Demo)

    $_POST = [
        'wind_1' => 'hk',
        'hamburger_66' => 'foo',
        'wind_2' => 'pop',
        'wind_25' => 'another'
    ];
    
    foreach ($_POST as $k => $v) {
        if (strpos($k, 'wind_') === 0) {  // simple validatation
            $key = $k;  // overwrite previous qualifying key
        }
    }
    echo filter_var($key, FILTER_SANITIZE_NUMBER_INT);  // isolate the number
    // or you could use str_replace('wind_', '', $key);
    

    Or if you want to get a bit funky...

    echo max(preg_replace('~^(?:wind_|.*)~', '', array_keys($_POST)));
    

    This replaces all of the leading wind_ substrings OR the whole string, then plucks the highest value.

    Demo


    P.S. When you are anyone else ascends to PHP7.3 or higher, there is a wonderful function released (array_key_last())to access the last key of an array. (I'm assuming the keys are reliably structured/sorted.)

    Code: (Demo)

    $_POST = [
        'wind_1' => 'hk',
        'wind_2' => 'pop',
        'wind_25' => 'another'
    ];
    
    echo substr(array_key_last($_POST), 5);
    // output: 25
    

    After all of the above workarounds, I think the best advice would be to change the way you are coding your form fields. If you change the name attribute from wind_# to wind[#], you will create a wind subarray within $_POST and then you can access the number values without dissecting a string. (Demo)

    echo array_key_last($_POST['wind']);
    

    or (sub PHP7.3)

    end($_POST['wind']);
    echo key($_POST['wind']);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥20 求快手直播间榜单匿名采集ID用户名简单能学会的
  • ¥15 DS18B20内部ADC模数转换器
  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历