【问题标题】:PHP : get parent child valuePHP:获取父子值
【发布时间】:2018-04-03 05:02:03
【问题描述】:

我有一个这样的数组

array (
  0 => 
  array (
    'id' => '1',
    'job_id' => 'J1',
    'parent_id' => '0',
  ),
  1 => 
  array (
    'id' => '2',
    'job_id' => 'J2',
    'parent_id' => '0',
  ),
  2 => 
  array (
    'id' => '3',
    'job_id' => 'J3',
    'parent_id' => '1',
  ),
  3 => 
  array (
    'id' => '4',
    'job_id' => 'J4',
    'parent_id' => '2',
  ),
  4 => 
  array (
    'id' => '5',
    'job_id' => 'J5',
    'parent_id' => '3',
  ),
  5 => 
  array (
    'id' => '6',
    'job_id' => 'J6',
    'parent_id' => '1',
  ),
  6 => 
  array (
    'id' => '8',
    'job_id' => 'J8',
    'parent_id' => '7',
  ),
)

我正在显示子记录,其中 parent_id 与它的父记录一起提及

输出

Array
(
[1] => Array
    (
        [job_id] => J1
        [parent_id] => 0
        [children] => Array
            (
                [0] => Array
                    (
                        [job_id] => J3
                        [parent_id] => 1
                        [children] => Array
                            (
                                [0] => Array
                                    (
                                        [job_id] => J5
                                        [parent_id] => 3
                                    )
                            )
                    )

                [1] => Array
                    (
                        [job_id] => J6
                        [parent_id] => 1
                    )

            )

    )

[2] => Array
    (
        [job_id] => J2
        [parent_id] => 0
        [children] => Array
            (
                [0] => Array
                    (
                        [job_id] => J4
                        [parent_id] => 2
                    )
            )
    )

)

现在我想要 - 如果提到 parent_id 但它在给定数组中不可用,那么希望在输出中显示主数组中的记录而不是子数组

期待输出

Array
(
[1] => Array
    (
        [job_id] => J1
        [parent_id] => 0
        [children] => Array
            (
                [0] => Array
                    (
                        [job_id] => J3
                        [parent_id] => 1
                        [children] => Array
                            (
                                [0] => Array
                                    (
                                        [job_id] => J5
                                        [parent_id] => 3
                                    )

                            )

                    )

                [1] => Array
                    (
                        [job_id] => J6
                        [parent_id] => 1
                    )

            )

    )

[2] => Array
    (
        [job_id] => J2
        [parent_id] => 0
        [children] => Array
            (
                [0] => Array
                    (
                        [job_id] => J4
                        [parent_id] => 2
                    )

            )

    )
[3] => Array
    (
        [id] => 8
        [job_id] => J8
        [parent_id] => 7
    )
 )

这里 id 7 不存在错误,我希望它作为以 id 作为键的父记录。怎么找到?

代码

function buildTree( $ar, $pid = 0 ) {
        $op = array();
        foreach( $ar as $item ) {
            echo '<pre>';
            //print_r($item);echo '<br>';//exit;
            if( $item['parent_id'] == $pid ) {
                $op[$item['id']] = array(
                    'job_id' => $item['job_id'],                       
                    'parent_id' => $item['parent_id']
                );
                // using recursion
                $children =  buildTree( $ar, $item['id'] );
                //print_r($children);
                $children = array_values($children);
                if( $children ) {
                    $op[$item['id']]['children'] = $children;
                }
            }
        }
        return $op;
 }

【问题讨论】:

  • 发布数组时,请不要使用var_dumpprint_r,而是使用var_export,这有助于我们重复使用数组
  • @Thamilan:我现在更新了数组格式。

标签: php arrays recursion


【解决方案1】:

您可以在上面的新数组中添加 pid:

$op = 数组; 因此,每次调用 buildtree 时,都会将 pid 添加到新数组中。 你可以在返回的结果 $op 数组中添加其他数组。

这应该在 buildtree 方法之外完成: 检查是否有任何元素的 parent_id 不在创建的新数组中,如果是,则根据要求将该元素添加到 $op。

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    相关资源
    最近更新 更多