我有一个数组数组 - 每个数组都有自己的id和父id值。 我想对它进行排序,以便每个孩子都应该在它的父母之下。 让我告诉你我的代码:PHP - 按父级和ID排序数组(高级)
定的数组:
$arr = array(array('id' => 15, 'parent' => 12), array('id' => 10, 'parent' => 12), array('id' => 12, 'parent' => 12), array('id' => 17, 'parent' => 12), array('id' => 21, 'parent' => 15), array('id' => 13, 'parent' => 15), array('id' => 15, 'parent' => 15), array('id' => 25, 'parent' => 15), array('id' => 7, 'parent' => 7), array('id' => 18, 'parent' => 7), array('id' => 4, 'parent' => 7), array('id' => 1, 'parent' => 3), array('id' => 5, 'parent' => 5), array('id' => 2, 'parent' => 7));
如何输出应该looki像(ASC家长,每个孩子也上升 - 总是在父(母总是像第一)):
0 => 'id' => int 1 'parent' => int 3 1 => 'id' => int 5 'parent' => int 5 2 => 'id' => int 7 'parent' => int 7 3 => 'id' => int 2 'parent' => int 7 4 => 'id' => int 4 'parent' => int 7 5 => 'id' => int 18 'parent' => int 7 6 => 'id' => int 12 'parent' => int 12 7 => 'id' => int 10 'parent' => int 12 8 => 'id' => int 15 'parent' => int 12 9 => 'id' => int 17 'parent' => int 12 10 => 'id' => int 15 'parent' => int 15 11 => 'id' => int 13 'parent' => int 15 12 => 'id' => int 21 'parent' => int 15 13 => 'id' => int 25 'parent' => int 15
问: 我'想知道什么是实现这一目标的最简单的解决方案?我已经成功地做到这一点,但我不能停止的感觉,有一种方法做,在更快,更优化的方式..
这里是我的代码:
function groupByParent ($array) { $groups = array(); foreach ($array as $a) { $groups[$a['parent']][] = $a; } return $groups; } function insideSort ($array) { foreach ($array as $k => $v) { usort($array[$k], function($a, $b){ return $a['id'] == $b['parent'] ? -1 : 1; }); $f = array_shift($array[$k]); sort($array[$k]); array_unshift($array[$k], $f); } return $array; } function finalSort($array) { $final = array(); foreach ($array as $a) { $final = array_merge($final, $a); } return $final; } $grr = groupByParent($arr); $irr = insideSort($grr); ksort($irr); $res = finalSort($irr);
有更简单的方法来实现它?
干杯
- 不工作 - 父母总是对的arent子女 – user7360969