我有一個數組數組 - 每個數組都有自己的id和父id值。我想對它進行排序,以便每個孩子都應該在它的父母之下。讓我告訴你我的代碼:按id和父排序php數組
Given Array:
$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));
如何輸出應該像(由家長遞增,每個孩子也上升 - 總是在父(母總是像第一次!)):
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
問題:我想知道最簡單的解決方案是什麼?我已經成功地做到這一點,但我不能停止的感覺,有一種方法做,在更快,更優化的方式..
Here is my code:
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);
是否有更簡單的方法來實現呢?
乾杯
是 - 正好!我只是簡單地想讓這個數組按照升序排序,但子女總是必須在父母之下(父母始終在自己的組中) – user7362902
下面是如何解決問題的另一個示例:http:// pastebin。 com/LPdTNF0Y然而,這是一個混亂的方式,不是一個非常有效的方法。你的解決方案更清潔,運行時間更好,我會堅持下去。 –