Home > Article > Backend Development > PHP non-recursive tree array constructor
I would like to share two constructors of tree arrays that do not require recursion, as a reference for friends in need.
Non-recursive tree array constructor, code: <?php /** *创建父节点树形数组 * 参数 $ar 数组,邻接列表方式组织的数据 * $id 数组中作为主键的下标或关联键名 * $pid 数组中作为父键的下标或关联键名 * 返回 多维数组 * by bbs.it-home.org **/ function find_parent($ar, $id = 'id', $pid = 'pid') { foreach ( $ar as $v ) $t [$v [$id]] = $v; foreach ( $t as $k => $item ) { if ($item [$pid]) { if (! isset ( $t [$item [$pid]] ['parent'] [$item [$pid]] )) $t [$item [$id]] ['parent'] [$item [$pid]] = & $t [$item [$pid]]; } } return $t; } /** * * 创建子节点树形数组 * 参数 * * $ar 数组,邻接列表方式组织的数据 * $id 数组中作为主键的下标或关联键名 * $pid * 数组中作为父键的下标或关联键名 * 返回 多维数组 * */ function find_child($ar, $id = 'id', $pid = 'pid') { foreach ( $ar as $v ) $t [$v [$id]] = $v; foreach ( $t as $k => $item ) { if ($item [$pid]) { $t [$item [$pid]] ['child'] [$item [$id]] = & $t [$k]; } } return $t; } $data = array ( array ( 'ID' => 1, 'PARENT' => 0, 'NAME' => '祖父' ), array ( 'ID' => 2, 'PARENT' => 1, 'NAME' => '父亲' ), array ( 'ID' => 3, 'PARENT' => 1, 'NAME' => '叔伯' ), array ( 'ID' => 4, 'PARENT' => 2, 'NAME' => '自己' ), array ( 'ID' => 5, 'PARENT' => 4, 'NAME' => '儿子' ) ); $p = find_parent ( $data, 'ID', 'PARENT' ); $c = find_child ( $data, 'ID', 'PARENT' ); print_r($c); exit; ?> |