【问题标题】:How to group array by parent id如何按父ID对数组进行分组
【发布时间】:2012-12-19 23:41:23
【问题描述】:

这是我的数组输出

Array
(
    [1] => Array
        (
            [id] => 1
            [name] => Category A
            [parent] => 0
        )
    [2] => Array
        (
            [id] => 2
            [name] => Sub Cat A - 1
            [parent] => 1
        )
    [3] => Array
        (
            [id] => 3
            [name] => Sub Cat A - 2
            [parent] => 1
        )
    [4] => Array
        (
            [id] => 4
            [name] => Sub Cat A 2 - 1
            [parent] => 3
        )
    [5] => Array
        (
            [id] => 5
            [name] => Category B
            [parent] => 0
        )
    [6] => Array
        (
            [id] => 6
            [name] => Sub Cat B - 1
            [parent] => 5
        )
    [7] => Array
        (
            [id] => 7
            [name] => Category C
            [parent] => 0
        )
)

我试过这个但输出错误。

foreach ($categories as $key => $category) {
    $group[$category['parent']][$key] = $category;
}

问题:如何重新组合数组和我想要的输出应该是这样的

Category A
    Sub Cat A - 1
    Sub Cat A - 2
        Sub Cat A 2 - 1
Category B
    Sub Cat B - 1
Category C

【问题讨论】:

  • 您可以找到问题的答案here

标签: php arrays


【解决方案1】:

试试这个代码;

<?php
$as // your array
$new_as = array();
foreach ($as as $ind => $a) {
    $new_as[$a['id']] = $a;
    $new_as[$a['id']]['children'] = array();
}

foreach ($new_as as $ind => &$new_a) {
    $parent = $new_as[$ind]['parent'];
    if(isset($new_as[$parent])){
        $new_as[$parent]['children'][] = & $new_as[$ind];
    }
}
echo '<pre>';
foreach ($new_as as $ind => &$new_a) {
    if ($new_a['parent'] == 0) {
        echo $new_a['name'];
        echo "\n";
        print_children($new_a['children'],1);
    }
}
echo '</pre>';    
function print_children($children, $level = 0)
{
    foreach ($children as $child) {
        echo str_repeat("    ", $level);
        echo $child['name'];
        echo "\n";
        print_children($child['children'], $level + 1);
    }
}

【讨论】:

  • 除了使它们成为线程之外,这还将所有子类别广告到顶级数组。由于打印结构取决于父级是否为“0”,因此不会显示。您可以通过 var_dump'ing $new_as 看到这一点
  • “试试这个”的答案在 Stackoverflow 上的价值很低,因为它们在教育/授权 OP 和成千上万的未来研究人员方面做得很差。
  • 虽然此代码可以解决问题,including an explanation 说明如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。
猜你喜欢
  • 2020-02-29
  • 1970-01-01
  • 2022-12-16
  • 2021-10-05
  • 1970-01-01
  • 2018-07-16
  • 2021-11-17
  • 1970-01-01
  • 2017-12-12
相关资源
最近更新 更多