我有一個數組數組 - 每個數組都有自己的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