Php 用多级数组重构foreach
我当前正在返回数组中sql语句的结果,如下所示:Php 用多级数组重构foreach,php,arrays,loops,foreach,Php,Arrays,Loops,Foreach,我当前正在返回数组中sql语句的结果,如下所示: $results = []; foreach($promotionTool as $p){ $results[] = $p; } return $results; 我的控制台在具有此结构的对象中显示: (2) [{…}, {…}] 0: codeID: "41" code: "123ABC" rule_type: "Category"
$results = [];
foreach($promotionTool as $p){
$results[] = $p;
}
return $results;
我的控制台在具有此结构的对象中显示:
(2) [{…}, {…}]
0:
codeID: "41"
code: "123ABC"
rule_type: "Category"
attribute_type: "identifier"
attribute_title: "category number"
attribute_value: "234"
1:
codeID: "41"
code: "123ABC"
rule_type: "Category"
attribute_type: "amount"
attribute_title: "percent"
attribute_value: "25"
这显示了我所期望的数据,但我对如何重新构造它有点迷茫,这样我就可以在某些级别上进行分组,最后只返回一个属性数组,如下所示:
codeID
code
rule_type
array(
0:
attribute_type: "identifier"
attribute_title: "category number"
attribute_value: "234"
1:
attribute_type: "amount"
attribute_title: "percent"
attribute_value: "25"
)
我将如何重构我的foreach,以便以这种方式在多个级别进行分组?我想这就是您想要的:
<?php
$input = [
[
'codeID' => "41",
'code' => "123ABC",
'rule_type' => "Category",
'attribute_type' => "identifier",
'attribute_title' => "category number",
'attribute_value' => "234"
],
[
'codeID' => "41",
'code' => "123ABC",
'rule_type' => "Category",
'attribute_type' => "amount",
'attribute_title' => "percent",
'attribute_value' => "25"
]
];
$output = [];
array_walk($input, function ($e) use (&$output) {
$output[$e['codeID']][$e['code']][$e['rule_type']][] = [
'attribute_type' => $e['attribute_type'],
'attribute_title' => $e['attribute_title'],
'attribute_value' => $e['attribute_value']
];
});
print_r($output);
结果显然是:
Array
(
[41] => Array
(
[123ABC] => Array
(
[Category] => Array
(
[0] => Array
(
[attribute_type] => identifier
[attribute_title] => category number
[attribute_value] => 234
)
[1] => Array
(
[attribute_type] => amount
[attribute_title] => percent
[attribute_value] => 25
)
)
)
)
)
因此,您基本上希望对数组进行排序,并排除具有相等值的键?如果有另一个条目带有:
codeID:“42”
?一个简单的问题:这给出了codeID、code和rule类型的前三个级别作为它们的值,这是正确的。但是我如何才能给每个元素一个级别标题,这样它会说[codeID]=>41,[code]=>123ABC等等。当然,一切都是可能的,但这不是小事,因为数组条目的元素不能有两个值,数字和所需的数组。如果你能说出结果应该是什么样子的话,那么创建它并不困难。但我看不到明显的解决办法。
Array
(
[41] => Array
(
[123ABC] => Array
(
[Category] => Array
(
[0] => Array
(
[attribute_type] => identifier
[attribute_title] => category number
[attribute_value] => 234
)
[1] => Array
(
[attribute_type] => amount
[attribute_title] => percent
[attribute_value] => 25
)
)
)
)
)