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检查一下