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

如何对数组中包含在 JSON 中的值进行排序?

如何对数组中包含在 JSON 中的值进行排序?

PHP
函数式编程 2021-11-26 17:52:28
我正在接收来自数据库的数据,这些数据来自包含 JSON 的数组。我想按标题对重复的值进行分组,即 GROUP 是标题,BREED 是标题,NAME 是这个标题的描述,如下所示。车辆(集团)电动(品种)奥迪 A3 Sportback宝马i3雪佛兰螺栓克莱斯勒 Pacifica PHEV福特聚变能源现代 IONIQ Electric梅赛德斯 GLE 550福特三菱/日产自走式(BREED)步兵战斗装甲侦察骑兵格斗装甲人员空中缆车婴儿车送货车日产聆风推土机这是里面有 JSON 的数组,下面是获取信息的循环。<?php$array = array(    '{    "GROUP": "Vehicle",    "BREED": "Self-Propelled",    "NAME": "Infantry fighting."    }',    '{        "GROUP": "Vehicle",        "BREED": "Electric",        "NAME": "Audi A3 Sportback."    }',    '{        "GROUP": "Vehicle",        "BREED": "Self-Propelled",        "NAME": "Armored reconnaissance"    }',    '{        "GROUP": "Vehicle",        "BREED": "Electric",        "NAME": "BMW i3"    }',    '{        "GROUP": "Vehicle",        "BREED": "Self-Propelled",        "NAME": "Cavalry fighting"    }',    '{        "GROUP": "Vehicle",        "BREED": "Electric",        "NAME": "Chevrolet Bolt"    }',    '{        "GROUP": "Vehicle",        "BREED": "Electric",        "NAME": "Chrysler Pacifica PHEV."    }',    '{        "GROUP": "Vehicle",        "BREED": "Self-Propelled",        "NAME": "Armored personnel"    }',    '{        "GROUP": "Vehicle",        "BREED": "Electric",        "NAME": "Ford Fusion Energi."    }',    '{        "GROUP": "Vehicle",        "BREED": "Self-Propelled",        "NAME": "aerial tramway"    }',    '{        "GROUP": "Vehicle",        "BREED": "Self-Propelled",        "NAME": "baby carriage"    }',    '{        "GROUP": "Vehicle",        "BREED": "Electric",        "NAME": "Hyundai IONIQ Electric."    }',    '{        "GROUP": "Vehicle",        "BREED": "Self-Propelled",        "NAME": "delivery truck"    }',    '{        "GROUP": "Vehicle",        "BREED": "Electric",        "NAME": "Mercedes GLE 550e."    }',    '{        "GROUP": "Vehicle",        "BREED": "Electric",        "NAME": "Ford F"    }',注意 BREED 和 GROUP 一遍又一遍地重复,我怎样才能让它们看起来像顶级模型?
查看完整描述

2 回答

?
森林海

TA贡献2011条经验 获得超2个赞

再次阅读文章后,我意识到,有是在那里尝试已经(对不起,我先前的评论说,否则......)。关于如何解决数据重组问题,我的建议如下:


$newarr=array();

for($i = 0; $i < count($array); $i++){  

  $obj = json_decode($array[$i]);

  $newarr[$obj->GROUP][$obj->BREED][]=$obj->NAME;

}

foreach ($newarr as $group => $breeds) {

    echo "<h1>$group</h1>\n";    

    foreach ($breeds as $breed => $vehicles) 

      echo "<p><b>$breed</b><br>\n".join("<br>\n",$vehicles)."</p>\n";

}

您可以在此处找到工作演示:https : //rextester.com/OYD48391


查看完整回答
反对 回复 2021-11-26
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

您需要先重构您的数据,然后再渲染它们,如下所示


// we will restructure the array to look like the following

[

    "Vehicle" => [

        "Self-Propelled" => [

            0 => "Infantry fighting.",

            1 => "Cavalry fighting",

            2 => "Armored personnel",

            3 => "aerial tramway",

            4 => "baby carriage",

            5 => "delivery truck",

            6 => "Nissan LEAF.",

            7 => "Earth mover",

        ],        

        "Electric" => [

            0 => "Audi A3 Sportback.",

            1 => "BMW i3",

            2 => "Chevrolet Bolt",

            3 => "Chrysler Pacifica PHEV.",

            4 => "Ford Fusion Energi.",

            5 => "Hyundai IONIQ Electric.",

            6 => "Mercedes GLE 550e.",

            7 => "Ford F",

            8 => "Mitsubishi/Nissan",

        ]

    ],

    "Passageiro" => [

        "Self-Propelled" => [

            0 => "Armored reconnaissance",

        ]

    ],

]

// first restructure the array

$restructuredArray = [];

foreach ($array as $jsonData) {

    $data = json_decode($jsonData);

    $restructuredArray[$data->GROUP] = $restructuredArray[$data->GROUP] ?? [];

    $restructuredArray[$data->GROUP][$data->BREED] = $restructuredArray[$data->GROUP][$data->BREED] ?? [];

    $restructuredArray[$data->GROUP][$data->BREED][] = $data->NAME;

}

// second rendering the restructured array

foreach ($restructuredArray as $group => $breeds) {

    echo "<h1>{$group}</h1>";

    foreach($breeds as $breed => $names) {

        echo "<h3>{$breed}</h3>";

        foreach($names as $name) {

            echo "<p>{$name}</p>";

        }

    }

}

建议 如果您可以控制数据库,最好以更好的格式或结构保存数据,在您的情况下,您可以使用 SQL(如 MySQL 使用关系)或 NoSQL(基于文档的数据库,如 MongoDB),两者都适合为您的需要。


查看完整回答
反对 回复 2021-11-26
  • 2 回答
  • 0 关注
  • 182 浏览

添加回答

举报

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