Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中获取多维数组的索引名_Php_Arrays_Regex_Wordpress_Indexing - Fatal编程技术网

在PHP中获取多维数组的索引名

在PHP中获取多维数组的索引名,php,arrays,regex,wordpress,indexing,Php,Arrays,Regex,Wordpress,Indexing,我有一个带有多个输入字段的表单,这些字段被序列化并通过AJAX传递给函数。在函数内部,我有以下形式的数据。我需要将簿记员、出版公司和1作为单独的变量 // $key = '_data' // $values = {"name":"_data[Book-Keeper][publish_companies]","value":"1"} 这是函数代码 function fnc_edit_roles(WP_REST_Request $request) { $variables = $_REQ

我有一个带有多个输入字段的表单,这些字段被序列化并通过AJAX传递给函数。在函数内部,我有以下形式的数据。我需要将
簿记员
出版公司
1
作为单独的变量

// $key = '_data'
// $values = {"name":"_data[Book-Keeper][publish_companies]","value":"1"}
这是函数代码

function fnc_edit_roles(WP_REST_Request $request) {

    $variables = $_REQUEST; 

    // Get all $_POST variables into $data[] array with key=>value
    if( $variables ) {

        while ( list( $field, $value ) = each( $_REQUEST )) {

            if( $field !== '_nonce' ) {
                $data[$field] = $value;
            }

        } // end while

    } // end if

    foreach( $data as $key=>$values ) {
        // $key = '_data'
        // $values = {"name":"_data[Book-Keeper][publish_companies]","value":"1"}
        // How do I get 'Book-Keeper', 'publish_companies', and '1' into separate variables?

    }

    $result = array( 'msg' => $data, 'error' => false );
    return json_encode( $result );

}
下面是我如何获得HTML中的输入

<form id="_user_roles_form" method="post" class="form-horizontal">
    <div class="form-group row">
        <label class="col-lg-6 control-label">Publish Companies</label>
        <div class="col-lg-6">
            <div class="btn-group" data-toggle="buttons">
                <label class="btn btn-default active">
                    <input type="radio" name="_data[Book-Keeper][publish_companies]" value="1"/> True
                </label>
                <label class="btn btn-default ">
                    <input type="radio" name="_data[Book-Keeper][publish_companies]" value="0"/> False
                </label>
            </div>
        </div>
    </div>
</form>

长问题短问题,我如何从字符串
中获取
簿记员
发布公司
\u数据[簿记员][发布公司]
<代码>键或
数组\u键
在这里不起作用…

试试这个,希望这能帮到你。这里我们使用正则表达式:
\[([\w\-]+)\]
,它将匹配示例:
[something-some\u值]


试试这个,希望它能帮助你。这里我们使用正则表达式:
\[([\w\-]+)\]
,它将匹配示例:
[something-some\u值]


@Donsgan您可以共享获取索引名称的数组吗?@SahilGulati数组([Book Keeper]=>array([publish_Companys]=>1));这就是我通过PHP打印得到的结果,它后来被序列化并用javascript传递给AJAX。“你想
簿记员
发布公司
吗?或者仅仅是
簿记员
?你能告诉我这是样本
/$key='\u data'/$values={“name”:“\u data[Book Keeper][publish\u companys]”,“value”:“1”}
?比如说,我需要
簿记员
进入$role\u name,
发布公司
进入$cap\u name。是的,这是我在传递序列化数组的函数中得到的实际示例。现在,我使用
str\u replace
explode
将它们放入单独的变量中,但我想有一个合适的方法来处理这个问题。请告诉我一些情况。@Donsgan你能分享获取索引名称的数组吗?@SahilGulati数组([Book Keeper]=>数组([publish_Companys]=>1));这就是我通过PHP打印得到的结果,它后来被序列化并用javascript传递给AJAX。“你想
簿记员
发布公司
吗?或者仅仅是
簿记员
?你能告诉我这是样本
/$key='\u data'/$values={“name”:“\u data[Book Keeper][publish\u companys]”,“value”:“1”}
?比如说,我需要
簿记员
进入$role\u name,
发布公司
进入$cap\u name。是的,这是我在传递序列化数组的函数中得到的实际示例。现在,我使用
str\u replace
explode
将它们放入单独的变量中,但我想有一个合适的方法来处理这个问题。请给我点启示。谢谢我的天才朋友。谢谢我的天才朋友。
var _data = jQuery('#_user_roles_form').serializeArray();

jQuery.ajax({
    url: myAjaxUrl,
    type: 'POST',
    data: _data,
    success: function( json ) {
        var result = JSON.parse( json );
        console.log( result.msg );
    }
});
ini_set('display_errors', 1);

foreach ($data as $key => $values)
{
    //$key = '_data';
    //$values = '{"name":"_data[Book-Keeper][publish_companies]","value":"1"}';
    $array = json_decode($values, true);
    $value = $array["value"];//will contain value
    preg_match_all("/\[([\w\-]+)\]/", $array["name"], $matches);
    list($role_name,$cap_name)=$matches[1];
    echo $role_name;//will contain role name
    echo $cap_name;//will contain company name
}