为了账号安全,请及时绑定邮箱和手机立即绑定

使用多级数组重构 foreach

使用多级数组重构 foreach

PHP
红颜莎娜 2021-11-05 13:24:16
我目前正在从一个数组中的 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 以这种方式在多个级别进行分组?
查看完整描述

1 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

我想这就是你要找的:


<?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_walk($input, function ($e) use (&$output) {

    $codeID = &$e['codeID'];

    $code = &$e['code'];

    $rule_type = &$e['rule_type'];


    $output[$codeID][$code][$rule_type][] = [

        'attribute_type' => $e['attribute_type'],

        'attribute_title' => $e['attribute_title'],

        'attribute_value' => $e['attribute_value']

    ];

});

输出显然是:


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

                                )

                        )

                )

        )

)


查看完整回答
反对 回复 2021-11-05
  • 1 回答
  • 0 关注
  • 144 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信