<?php
function gen($parents, $children) {
$data = array();
$i = 0;
for($i; $i < $parents; $i++) {
$data[$i] = array(
'indent' => 'test ' . $i,
'depth' => 1
);
}
for($i; $i < $children; $i++) {
$data[$i] = array(
'indent' => 'test ' . $i,
'depth' => 'x',
'parent_id' => rand(0, $i)
);
}
return $data;
}
function v1($array) {
foreach ($array as $key => &$sub) {
if (isset($sub['parent_id'])) {
$array[$sub['parent_id']]['children'][$key] = &$sub;
}
}
unset($sub); // unset the reference to make sure to not overwrite it later...
// now remove the entries with parents
foreach ($array as $key => $sub) {
if (isset($sub['parent_id']))
unset($array[$key]);
}
return $array;
}
function push_at_key($what, $what_key, $key, $array) {
foreach($array as $k => $v) {
if($key == $k) {
$array[$k]['children'][$what_key] = $what;
return $array;
}
}
foreach($array as $k => $v) {
$array[$k] = push_at_key($what, $what_key, $key, $v['children']);
}
return $array;
}
function v2($array) {
$out = array();
foreach ($array as $key => $sub) {
if(!isset($sub['parent_id'])) {
$out[$key] = $sub;
}
else {
$out = push_at_key($sub, $key, $sub['parent_id'], $out);
}
}
return $out;
}
$array = gen(10, 690);
var_dump(v1($array));
//var_dump(v2($array));
preferences:
26.58 ms | 402 KiB | 5 Q