简体   繁体   English

如何分组和回显多维数组

[英]How to group and echo multidimensional array

I want to echo multidimensional array from my database, I have tried to search in stackoverflow, but I can't implemented well. 我想从我的数据库中回显多维数组,我试图在stackoverflow中进行搜索,但是我不能很好地实现。

Here's my array : 这是我的数组:

Array (
    [0] => Array (
            [product_name] => BMW
            [category_name] => Car
        )
    [1] => Array(
            [product_name] => Jaguar
            [category_name] => Car
        )
    [2] => Array(
            [product_name] => Toyota
            [category_name] => Car
        )
    [3] => Array (
            [product_name] => Jeep
            [category_name] => Car
        )
    [4] => Array (
            [product_name] => Ducati
            [category_name] => Bike
        )

)

I need to group this array to be like this : 我需要将这个数组分组为这样:

Array(
    [0] => Array(
            [category_name] => Car
            [product_name] => Array(
                    [0] => Array(
                            [product_name] => BMW
                        )

                    [1] => Array(
                            [product_name] => Toyota
                        )

                    [2] => Array(
                            [product_name] => Jaguar
                        )

                    [3] => Array(
                            [product_name] => Jeep
                        )))

    [1] => Array (
            [category_name] => Bike
            [product_name] => Array
                (
                    [0] => Array
                        (
                            [product_name] => Ducati
                        )) )

And then echo to html list : 然后回显到html list:

Car : - BMW - Toyota - Jaguar - Jeep 汽车:-宝马-丰田-捷豹-吉普车

Bike : - Ducati 自行车:-杜卡迪

Please help.. Thanks 请帮助..谢谢

Here is your snippet, please refer inline doc for explanation 这是您的代码段,请参考内联文档以获取解释

$temp = [];
foreach ($arr as $key => $value) {
    $temp[$value['category_name']]['category_name']  = $value['category_name']; // first category assigned
    $temp[$value['category_name']]['product_name'][] = $value['product_name']; // grasping all values for same category name
}
foreach ($temp as $key => $value) {
    echo $value['category_name'].':- '. implode(" - ", $value['product_name']).'<br>'; // creation of string
}

working demo . 工作演示

Hope it helps. 希望能帮助到你。

$t = [];
foreach($input_array as $v) {
    $t[$v['category_name']] [] = $v['product_name'];
}
$out = [];
foreach ($t as $key => $val) {
        $out[$key] = implode(',',$val);
}
echo $out['car'];
echo "\n";
echo $out['bike'];

You can use array_map , array_column 您可以使用array_maparray_column

$res=[];
array_map(function($v) use (&$res){
  $res[$v['category_name']][] = ['product_name' => $v['product_name']];
}, $arr);
foreach($res as $type => $value){
 echo $type.':-'.implode(',',array_column($value, 'product_name'));
}

Live Demo 现场演示

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM