dongsheng4679 2018-06-28 03: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 04: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条)
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部