Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.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 用多级数组重构foreach_Php_Arrays_Loops_Foreach - Fatal编程技术网

Php 用多级数组重构foreach

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"

我当前正在返回数组中sql语句的结果,如下所示:

$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
                                )
                        )
                )
        )
)