私は配列の配列を持っています - それぞれは独自の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));
出力は次のようになりますどのように(両親によって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
質問:これを達成する最も簡単な解決策は何でしょうか?
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しかし、それは面倒な方法であり、非常に効率的な方法ではありません。あなたのソリューションはより洗練されており、より良い実行時間があります。私はそれに固執します。 –