如何获得Multi-Dim Array的格式输出


How to get format output of Multi-Dim Array

我有以下数组,$cat_group_array:

<>之前数组([0] =>数组([猫]=> 01[pgroup] => 0010[pgroup_name] =>牛排- STRIPLOINS)[1] =>数组([猫]=> 01[pgroup] => 0015[pgroup_name] =>牛排-牛排)[2] =>数组([猫]=> 01[pgroup] => 0020[pgroup_name] =>牛排- t -骨)[3] =>阵列([猫]=> 01[pgroup] => 0025[pgroup_name] =>牛排-里脊肉)[4] =>数组([猫]=> 01[pgroup] => 0030[pgroup_name] =>牛排-顶级西冷)[5] =>数组([猫]=> 01[pgroup] => 0035[pgroup_name] =>牛排-其他品种)[6] =>数组([猫]=> 05[pgroup] => 0145[pgroup_name] =>鸡块)[7] =>数组([猫]=> 05[pgroup] => 0150[pgroup_name] => CHICKEN-BREADED)[8] =>数组([猫]=> 05[pgroup] => 0155[pgroup_name] =>鸡胸肉(生产品)))之前

我的目标是得到一个类似这样的输出,我在分类标题

下显示组和组名<>之前猫:010010 -牛排-条纹0015 -牛排-肋眼牛排0020 -牛排-丁字骨0030 -牛排-上腰肉0035 -牛排-其他品种猫:050145 -鸡地0150 -鸡肉面包屑0155 -鸡胸之前

我已经尝试了几种方法,但都没有结果。我一直在尝试这样做,但我没有得到输出。

foreach ($cat_group_array as $key => $row) {     
    $test = $cat_group_array[$key]['cat'];
    echo "Category: " . $test;
    while ($cat_group_array[$key]['cat'] == $test) {
        echo "Pgroup #: " . $cat_group_array[$key]['pgroup'] .
        " Group Name = " . $cat_group_array[$key]['pgroup_name'] . "<br /><br />";    
    }
}

如果有人能告诉我正确的方向,我将不胜感激。

您可以通过几种方式做到这一点。我将提供一个解决方案,您不需要按类别对原始数组进行排序。它首先创建另一个以类别名称为键的数组,保存包含属于它的行的子数组。然后遍历这些类别,每个类别遍历行:

foreach ($cat_group_array as $row) {
    $categories[$row["cat"]][] = $row;
}
foreach ($categories as $name => $groups ) {
    echo "'n<h3>Category: $name</h3>'n'n";
    foreach ($groups as $group ) {
        echo "<p>{$group['pgroup']} {$group['pgroup_name']}</p>'n";
    }
}

在eval.in上运行

由于您需要提前知道类别,因此您可以使用array_map从数组中提取它们。

$categories = array_map(function($cat) {
    return $cat['cat'];
}, $cat_group_array);

因为你只需要知道唯一的类别,你可以使用array_unique来清除任何重复的类别。

$categories = array_unique($categories);

现在您可以使用$categories数组作为过滤器,以使用array_filter获得所需的最终结果。

foreach($categories as $category) {
    $items = array_filter(function($item) use($category) {
        return $item['cat'] === $category;
    }, $cat_group_array);
    echo "Cat: $category'n'n";
    foreach($items as $item) {
        echo "$pgroup - $pgroup_name'n";
    }
    echo "'n'n";
}

最后的结果应该和预期的一样。

<>之前猫:010010 -牛排-条纹0015 -牛排-肋眼牛排0020 -牛排-丁字骨0030 -牛排-上腰肉0035 -牛排-其他品种猫:050145 -鸡地0150 -鸡肉面包屑0155 -鸡胸