Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Multidimensional Array - Fatal编程技术网

Php 变换数组

Php 变换数组,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有这个数组 Array ( [condition] => AND [rules] => Array ( [0] => Array ( [type] => query-builder-rule [query] => Array (

我有这个数组

Array
(
    [condition] => AND
    [rules] => Array
        (
            [0] => Array
                (
                    [type] => query-builder-rule
                    [query] => Array
                        (
                            [id] => transactionDate
                            [field] => transactionDate
                            [type] => date
                            [input] => datepicker
                            [operator] => equal
                            [value] => 2017-05-02 00:00 - 2017-05-03 00:00
                            [rule] => transactionDate
                        )

                )

            [1] => Array
                (
                    [type] => query-builder-group
                    [query] => Array
                        (
                            [condition] => OR
                            [rules] => Array
                                (
                                    [0] => Array
                                        (
                                            [type] => query-builder-rule
                                            [query] => Array
                                                (
                                                    [id] => firstname
                                                    [field] => firstname
                                                    [type] => string
                                                    [input] => text
                                                    [operator] => equal
                                                    [value] => Doe
                                                    [rule] => firstname
                                                )

                                        )

                                    [1] => Array
                                        (
                                            [type] => query-builder-rule
                                            [query] => Array
                                                (
                                                    [id] => lastname
                                                    [field] => lastname
                                                    [type] => string
                                                    [input] => text
                                                    [operator] => equal
                                                    [value] => Doe
                                                    [rule] => lastname
                                                )

                                        )

                                    [2] => Array
                                        (
                                            [type] => query-builder-rule
                                            [query] => Array
                                                (
                                                    [id] => email
                                                    [field] => email
                                                    [type] => string
                                                    [input] => text
                                                    [operator] => equal
                                                    [value] => Doe
                                                    [rule] => email
                                                )

                                        )

                                )

                        )

                )

        )

)
Array
(
    [condition] => AND
    [rules] => Array
        (
        [0] => Array
                (
                    [id] => transactionDate
                    [field] => transactionDate
                    [type] => date
                    [input] => datepicker
                    [operator] => equal
                    [value] => 2017-05-02 00:00 - 2017-05-03 00:00
                    [rule] => transactionDate
            )

            [1] => Array
                (
                    [condition] => OR
                    [rules] => Array
                        (
                            [0] => Array
                                (
                                    [id] => firstname
                                    [field] => firstname
                                    [type] => string
                                    [input] => text
                                    [operator] => equal
                                    [value] => Doe
                                    [rule] => firstname
                                )

                            [1] => Array
                                (
                                    [id] => lastname
                                    [field] => lastname
                                    [type] => string
                                    [input] => text
                                    [operator] => equal
                                    [value] => Doe
                                    [rule] => lastname
                                )

                            [2] => Array
                                (
                                    [id] => email
                                    [field] => email
                                    [type] => string
                                    [input] => text
                                    [operator] => equal
                                    [value] => Doe
                                    [rule] => email
                                )

                        )

                )



        )

)
我需要把它转换成这个数组

Array
(
    [condition] => AND
    [rules] => Array
        (
            [0] => Array
                (
                    [type] => query-builder-rule
                    [query] => Array
                        (
                            [id] => transactionDate
                            [field] => transactionDate
                            [type] => date
                            [input] => datepicker
                            [operator] => equal
                            [value] => 2017-05-02 00:00 - 2017-05-03 00:00
                            [rule] => transactionDate
                        )

                )

            [1] => Array
                (
                    [type] => query-builder-group
                    [query] => Array
                        (
                            [condition] => OR
                            [rules] => Array
                                (
                                    [0] => Array
                                        (
                                            [type] => query-builder-rule
                                            [query] => Array
                                                (
                                                    [id] => firstname
                                                    [field] => firstname
                                                    [type] => string
                                                    [input] => text
                                                    [operator] => equal
                                                    [value] => Doe
                                                    [rule] => firstname
                                                )

                                        )

                                    [1] => Array
                                        (
                                            [type] => query-builder-rule
                                            [query] => Array
                                                (
                                                    [id] => lastname
                                                    [field] => lastname
                                                    [type] => string
                                                    [input] => text
                                                    [operator] => equal
                                                    [value] => Doe
                                                    [rule] => lastname
                                                )

                                        )

                                    [2] => Array
                                        (
                                            [type] => query-builder-rule
                                            [query] => Array
                                                (
                                                    [id] => email
                                                    [field] => email
                                                    [type] => string
                                                    [input] => text
                                                    [operator] => equal
                                                    [value] => Doe
                                                    [rule] => email
                                                )

                                        )

                                )

                        )

                )

        )

)
Array
(
    [condition] => AND
    [rules] => Array
        (
        [0] => Array
                (
                    [id] => transactionDate
                    [field] => transactionDate
                    [type] => date
                    [input] => datepicker
                    [operator] => equal
                    [value] => 2017-05-02 00:00 - 2017-05-03 00:00
                    [rule] => transactionDate
            )

            [1] => Array
                (
                    [condition] => OR
                    [rules] => Array
                        (
                            [0] => Array
                                (
                                    [id] => firstname
                                    [field] => firstname
                                    [type] => string
                                    [input] => text
                                    [operator] => equal
                                    [value] => Doe
                                    [rule] => firstname
                                )

                            [1] => Array
                                (
                                    [id] => lastname
                                    [field] => lastname
                                    [type] => string
                                    [input] => text
                                    [operator] => equal
                                    [value] => Doe
                                    [rule] => lastname
                                )

                            [2] => Array
                                (
                                    [id] => email
                                    [field] => email
                                    [type] => string
                                    [input] => text
                                    [operator] => equal
                                    [value] => Doe
                                    [rule] => email
                                )

                        )

                )



        )

)
我试图递归地做这件事,但我撞到了墙

我目前的代码是这样的,但它不是真的正确

public function transform($request)
{
    $request = json_decode($request, true);

    foreach ($request as $key => $value) {
        if ($key == 'rules') {
            foreach ($value as $rKey => $rValue) {
                if (!is_array($rValue['query']['rules'])) {
                    $this->parsedRequest[$key] = $rValue['query'];
                } else {
                    $this->transform(json_encode($rValue['query']));
                }
            }
        }

        $this->parsedRequest[$key] = $value;
    }
}
这只会覆盖现有的值。我的头脑绕不过去。我试着使用
array\u walk\u recursive
,但我无法让它工作。感谢您的帮助

顺便说一句,我需要这个递归,因为我不知道会有多少层。这些数组只是示例

编辑:
var\u导出

第一个阵列:

array ( 'condition' => 'AND', 'rules' => array ( 0 => array ( 'type' => 'query-builder-rule', 'query' => array ( 'id' => 'transactionDate', 'field' => 'transactionDate', 'type' => 'date', 'input' => 'datepicker', 'operator' => 'equal', 'value' => '2017-05-02 00:00 - 2017-05-03 00:00', 'rule' => 'transactionDate', ), ), 1 => array ( 'type' => 'query-builder-group', 'query' => array ( 'condition' => 'OR', 'rules' => array ( 0 => array ( 'type' => 'query-builder-rule', 'query' => array ( 'id' => 'firstname', 'field' => 'firstname', 'type' => 'string', 'input' => 'text', 'operator' => 'equal', 'value' => 'Doe', 'rule' => 'firstname', ), ), 1 => array ( 'type' => 'query-builder-rule', 'query' => array ( 'id' => 'lastname', 'field' => 'lastname', 'type' => 'string', 'input' => 'text', 'operator' => 'equal', 'value' => 'Doe', 'rule' => 'lastname', ), ), 2 => array ( 'type' => 'query-builder-rule', 'query' => array ( 'id' => 'email', 'field' => 'email', 'type' => 'string', 'input' => 'text', 'operator' => 'equal', 'value' => 'Doe', 'rule' => 'email', ), ), ), ), ), ), )
第二个阵列:

array ( 'condition' => 'OR', 'rules' => array ( 0 => array ( 'type' => 'query-builder-rule', 'query' => array ( 'id' => 'firstname', 'field' => 'firstname', 'type' => 'string', 'input' => 'text', 'operator' => 'equal', 'value' => 'Doe', 'rule' => 'firstname', ), ), 1 => array ( 'type' => 'query-builder-rule', 'query' => array ( 'id' => 'lastname', 'field' => 'lastname', 'type' => 'string', 'input' => 'text', 'operator' => 'equal', 'value' => 'Doe', 'rule' => 'lastname', ), ), 2 => array ( 'type' => 'query-builder-rule', 'query' => array ( 'id' => 'email', 'field' => 'email', 'type' => 'string', 'input' => 'text', 'operator' => 'equal', 'value' => 'Doe', 'rule' => 'email', ), ), ), )

在这里,我为您编写了代码。函数名为
simplify
,数组位于
$arr

<?php
function simplify($arr) {
    if(is_array($arr))
        foreach($arr as $key => &$a) {
            if($key == 'rules') {
                if(is_array($a))
                    foreach($a as $key2 => &$a2) {
                        if(isset($a2['query'])) {
                            if(isset($a2['query']['rules'])) {
                                $a2['query'] = simplify($a2['query']);
                            }
                            $a2 = $a2['query'];
                        }
                    }
            }
        }

    return $arr;
}

$arr = array(
    'condition' => 'AND',
    'rules' => array(
        0 => array(
            'type' => 'query-builder-rule',
            'query' => array(
                'id' => 'transactionDate',
                'field' => 'transactionDate',
                'type' => 'date',
                'input' => 'datepicker',
                'operator' => 'equal',
                'value' => '2017-05-02 00:00 - 2017-05-03 00:00',
                'rule' => 'transactionDate',
            ) ,
        ) ,
        1 => array(
            'type' => 'query-builder-group',
            'query' => array(
                'condition' => 'OR',
                'rules' => array(
                    0 => array(
                        'type' => 'query-builder-rule',
                        'query' => array(
                            'id' => 'firstname',
                            'field' => 'firstname',
                            'type' => 'string',
                            'input' => 'text',
                            'operator' => 'equal',
                            'value' => 'Doe',
                            'rule' => 'firstname',
                        ) ,
                    ) ,
                    1 => array(
                        'type' => 'query-builder-rule',
                        'query' => array(
                            'id' => 'lastname',
                            'field' => 'lastname',
                            'type' => 'string',
                            'input' => 'text',
                            'operator' => 'equal',
                            'value' => 'Doe',
                            'rule' => 'lastname',
                        ) ,
                    ) ,
                    2 => array(
                        'type' => 'query-builder-rule',
                        'query' => array(
                            'id' => 'email',
                            'field' => 'email',
                            'type' => 'string',
                            'input' => 'text',
                            'operator' => 'equal',
                            'value' => 'Doe',
                            'rule' => 'email',
                        ) ,
                    ) ,
                ) ,
            ) ,
        ) ,
    ) ,
);
$arr = simplify($arr);

您能使用
var\u export()
这样我们就可以得到数组了吗?我认为数组还是不正确。@AgamBanga解释一下please@housefrommars最后显示为“'rule'=>'email',),),),),,)“@housefrommars检查一下